测试了下replace函数的输入参数,
之前一直不了解,如果replace第二个参数为function,那么replace函数提供给function的输入参数是什么呢?
例如:
String.replace(regexp,function(?,?){})
猜想是:
function的输入参数跟exec函数返回结果想似。
先看测试代码:
<!DOCTYPE HTML>
<html>
<head>
<title>replace.html</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
</head>
<body>
<script type="text/javascript">
var url = "http://www.baidu.com/abc.jsp?method=method&name=abc&age=12";
//第一参数为字符串
console.group("字符串");
var newUrl1 = url.replace("www.baidu.com",function(){
console.log("replace输入参数:%o",arguments);
var val = /www.baidu.com/.exec(url);
console.log("exec输出参数:%o",val);
console.assert(arguments[0] === val[0]);
console.assert(arguments[1] === val["index"]);
console.assert(arguments[2] === val["input"]);
return "123";
});
console.log("replace返回字符串:"+newUrl1);
console.groupEnd("字符串");
//第一参数为正则表达式
console.group("正则表达式");
var regexp_global = /[?&](\w+)=([^&]*)/g;
var count = 0;
var newUrl2 = url.replace(regexp_global,function(){
console.log("第"+(count++)+"次运行");
console.log("replace输入参数:%o",arguments);
var val = regexp_global.exec(url);
console.log("exec输出参数:%o",val);
console.assert(arguments[0] === val[0]);
console.assert(arguments[1] === val[1]);
console.assert(arguments[2] === val[2]);
console.assert(arguments[3] === val["index"]);
console.assert(arguments[4] === val["input"]);
return count;
});
console.log("replace返回字符串:"+newUrl2);
console.groupEnd("正则表达式");
</script>
</body>
</html>
firefox下执行结果:
测试代码的断言都通过:
1、显然replace第二个参数function的输入参数跟第一参数.exec(url)返回的信息一致。
2、假如第一个参数不是正则表达式,function的输入参数依然为/第一参数/.exec(url)返回结果。