javascript中replace()函数用法小谈
2010-09-14 13:05:45 来源:WEB开发网先来深刻理解这句话:如果 replaceText 是一个函数,对于每个匹配的子字符串,调用该函数时带有下面的 m + 3 个参数,这里 m 是在 rgExp 中用于捕获的左括弧的个数。第一个参数是匹配的子字符串。接下来的 m 个参数是搜索中捕获到的全部结果。参数 m + 2 是当前字符串对象中发生匹配位置的偏移量,而参数 m + 3 是当前字符串对象。结果为将每一匹配的子字符串替换为函数调用的相应返回值后的字符串值。
用上面的例子来解释这句话吧。对于这个函数function(){return "";}实际上有4参数的,也就是上面所说的m+3个。这里m=1,是正则表达式中左括号的个数,也就是一个。而这4个参数分别是匹配到的子字符串、(s+)匹配到的字符串、匹配的位置、整个字符串(就是"The rain in Spain falls mainly in the plain.")这次一共匹配了8个,因为有8个空格嘛。我这里没有写参数,因为我直接就返回了""。也就是说我一找到一个(s+)我就把它换成""。实际上这个函数里面你可以写很多自己想得到的结果了。
接着盗用MSDN的例子
function f2c(s) ...{
var test = /(d+(.d*)?)F/g; //Initialize pattern.
return(s.replace
(test,
function($0,$1,$2) ...{
return((($1-32) * 5/9) + "C");
}
)
);
}
document.write(f2c("Water freezes at 32F and boils at 212F."));
document.write(f2c("Water freezes at 32F and boils at 212F."));
现在看这个就简单了吧。 var test = /(d+(.d*)?)F/g; 正则里面有俩左括号吧。所以现在这个function($0,$1,$2)实际上有2+3个参数,那为何只写3个呢?鬼才知道,其实连3个都不用,写俩就好了function($0,$1)。因为本例中我们只用到$1。有人可能还会问,既然我们只用到$1,为何还要写$0呢。其实$0,$1只不过是参数,实际我们想用的是第二个参数。可能你又忘记第二个参数代表什么了,再看一遍:如果 replaceText 是一个函数,对于每个匹配的子字符串,调用该函数时带有下面的 m + 3 个参数,这里 m 是在 rgExp 中用于捕获的左括弧的个数。第一个参数是匹配的子字符串。接下来的 m 个参数是搜索中捕获到的全部结果。参数 m + 2 是当前字符串对象中发生匹配位置的偏移量,而参数 m + 3 是当前字符串对象。结果为将每一匹配的子字符串替换为函数调用的相应返回值后的字符串值。$0是整个子字符串,$1是第一个括号内匹配到的字符串。本例中一共匹配了两次,第一次中$0为"32F",$1为"32"。第二次中$0为"212F",$1为"212"。
似乎replace基本就是这么用了,很多高级用法无非是经过这三种形式结合的。慢慢理解一下,还是比较简单的。
Tags:javascript replace 函数
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接