function function1(format) {
var regexp = /[<>]/g;
//Here the parameters are matched string,
//the position and the original text
var str = format.replace(regexp,function(match,position,originalText){
return match;
});
return str;
}
function function2(format) {
var regexp = /:(\w+)/g;
//Here the parameters are matched string,
//something like stripped string, and the position
var str = format.replace(regexp,function(match,stripped,position){
return match;
});
return str;
}
console.log(function1('<hello>'));
console.log(function2(':url :method'));
我从#Professional JavaScript for Web Developers#获得第一个函数,第二个函数来自#NodeJS in Action#。 您可以看到替换的回调函数不一致。为什么呢?
答案 0 :(得分:2)
function2
中的回调可以使用第4个参数编写,以便在示例中使用第一个回调显示更少的混淆和更多一致:
function function2(format) {
var regexp = /:(\w+)/g;
var str = format.replace(regexp,function(match,submatch,position,originalText){
return match;
});
return str;
}
查看替换中的回调如何defined:它接受许多参数&gt; = 3 。仅当正则表达式包含子匹配时,才使用可选参数,并且它们对应于 nth 带括号的子匹配字符串:
function(match, [p1, p2, ...], offset, string) { ... }
我猜,听起来令人困惑的是它们被置于中间位置。另请注意,如果第一个参数中的正则表达式是全局的(在您的示例中为true),则将为要替换的每个完整匹配多次调用回调函数。