js的replace函数入参为function时的疑问

(function (window) {    
        function fn(str) {    
            this.str = str;    
        }    
        fn.prototype.format = function () {
            var arg = arguments;
            return this.str.replace(/\{(\d+)\}/g, function (a, b, c, d) {  
            console.log(a + "/////" + b + "//////" + c + "/////" + d);  // b为什么是0,1,2
                return arg[b] || '';    
            });    
        }    
        window.fn = fn;    
    })(window);    
    // use    
    (function(){    
        var t = new fn('<p><a href="{0}">{1}</a><span>{2}</span></p>');  
        console.log( t.format('http://www.alibaba.com', 'Alibaba', 'Welcome') );    
    })();  

如上,请问输出b为什么是"{}"里的内容

阅读 5.1k
2 个回答
str.replace(reg,function($1,$2,$3)){
    //$1 为整个匹配你reg的字符串
    //$2-$n-1为匹配你reg要捕获的内容
}

你可以打印下对应参数

str.replace(reg,function()){
    console.log([].slice.call(arguments));
}

所以你的代码里b 就对应你正则里的\d+,就是你传入字符串里的0,1,2

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏