replace 第二个参数为函数的情况

replace()方法的第二个参数也可以是一个函数。在只有一个匹配项(即与模式匹配的字符串)的情况下,会向这个函数传递3个参数:模式的匹配项、模式匹配项在字符串中的位置和原始字符串。在正则表达式中定义了多个捕获组的情况下,传递给函数的参数依次是模式的匹配项、第一个捕获组的匹配项、第二个捕获组的匹配项……,但最后两个参数仍然分别是模式的匹配项在字符串中的位置和原始字符串。
例子:

//replace函数第二个参数是函数时,每个匹配都调用该函数,它返回的字符串将替换文本使用。
(function(window){
         function Fn(str){
                this.str = str;
         }
         Fn.prototype.format = function(){
                 console.log("arguments: ");
                 console.log(arguments);
                 //将类数组对象转化为数组
                 var arg = Array.prototype.slice.call(arguments,0);
                console.log(arg);

                return this.str.replace(/\{(\d+)\}/g,function(a,b,c,d){
                    console.log("a,b,c,d: ");
                    console.log(a);
                    console.log(b);
                    console.log(c);
                    console.log(d);
                    return arg[b-1]||"";                      
                      });
                };
              window.Fn = Fn;
}(window));

(function(){
            var  t = new Fn("<p><a href='{1}'>{2}</a><span>{3}</span></p>");
            console.log( t.format("http://www.alibaba.com","Alibaba","Welcome"));
            console.log(NaN !== NaN);//true
            console.log(NaN == NaN); //false
}());

输出结果为:

a,b,c,d: 
{1}
1
12
<p><a href='{1}'>{2}</a><span>{3}</span></p>
a,b,c,d: 
{2}
2
17
<p><a href='{1}'>{2}</a><span>{3}</span></p>
a,b,c,d: 
{3}
3
30
<p><a href='{1}'>{2}</a><span>{3}</span></p>
<p><a href='http://www.alibaba.com'>Alibaba</a><span>Welcome</span></p>
true
false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值