当函数作为第二个参数提供时,javascript中的替换函数不一致

时间:2014-10-10 08:41:44

标签: javascript replace

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#。 您可以看到替换的回调函数不一致。为什么呢?

1 个答案:

答案 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),则将为要替换的每个完整匹配多次调用回调函数。