js中replace的第⼆个参数是函数时的函数参数解析
当replace() ⽅法的第⼆个参数 replacement是函数⽽不是字符串时,每次匹配都调⽤该函数,将这个函数的返回的字符串将作为替换⽂本使⽤。这个函数是⾃定义的替换规则。
当第⼆个参数是函数时,这个函数的前三个参数():
1、当正则没有分组的时候,传进去的第⼀个实参是正则捕获到的内容,第⼆个参数是捕获到的内容在原字符串中的索引位置,第三个参数是原字符串(输⼊字符串)
2、当正则有分组的时候,第⼀个参数是总正则查到的内容,后⾯依次是各个⼦正则查到的内容。
2、传完查到的内容之后,再把总正则查到的内容在原字符串中的索引传进(就是arguments[0]在str中的索引位置)。最后把输⼊字符串(就是原字符串)传进去
⽰例1:
要求:到字符串中的⼩写字母,给它在后边加上⼩括号来注明它在str字符串中的位置。⽐如str中的第⼀个a,它出现在str字符串的第⼀个索引位置中,则a变成a(1)。下⾯
的str最终得到的结果是Xa(1)ZZc(4)Ud(6)Fe(8)
var str="XaZZcUdFe";
var reg=/[a-z]/g;//注意:全⽂替换必须加g
place(reg,function(){
return arguments[0]+"("+arguments[1]+")";
//arguments.length的值是3,在reg没有分组的情况下length属性肯定是3.
//其中arguments[0]是正则捕获查到的内容;arguments[1]是正则查到的内容在str这个字符串中的索引位置;arguments[2]是str字符串本⾝(叫输⼊字符串)
//这个匿名函数被⾃动执⾏四次,每⼀次arguments⾥的值分别是:
//第⼀次:arguments[0]是a,arguments[1]是1,arguments[2]是原字符str本⾝
//第⼆次:arguments[0]是c,arguments[1]是4,arguments[2]是原字符str本⾝
js 正则替换//第三次:arguments[0]是,arguments[1]是6,arguments[2]是原字符str本⾝
//第四次:arguments[0]是e,arguments[1]是8,arguments[2]是原字符str本⾝
})
alert(str);//弹出 Xa(1)ZZc(4)Ud(6)Fe(8)
⽰例2:
要求:出下⾯字符串中两个连着出现的数字,⽤它们的和将它们替换。
⽐如第⼀次到4和5,⽤9替换,第⼆次到的是8和9,⽤17替换,第三次到的是7和2,⽤9替换,最终⽣成的字符串是96a17b9cs
var str="456a89b72cs";
var reg=/(\d)(\d)/g;
place(reg,function(){
return Number(arguments[1])+Number(arguments[2]);
});
alert(str);//弹出96a17b9cs
//上⾯replace⾥的匿名函数会被⾃动执⾏三次(因为匹配到了三次);
//每次执⾏,arguments.length都是5;arments[0]是总正则查到的字符串,arguments[1]是第⼀个分组查到的内容,arguments[2]是第⼆个分组查到的内容,arguments[3]是总正则查到的内容在str这个字符串中的索引位置,arguments[4]是str这//第⼀次这五个参数的值分别是:arguments[0]是"45",arguments[1]是"4",arguments[2]是"5",arguments[3]是0,arguments[4]是"456a89b72cs";
//第⼆次这五个参数的值分别是:arguments[0]是"89",arguments[1]是"8",arguments[2]是"9",arguments[3]是4,arguments[4]是"456a89b72cs";
//第三次这五个参数的值分别是:arguments[0]是"45",arguments[1]是"4",arguments[2]是"5",arguments[3]是0,arguments[4]是"456a89b72cs"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。