str.replace(/xxx/g, (yyy)=>{...}) 的用法
参数
从 developer.mozilla.org/zh-CN/docs/W... 拷贝了一例稍加修改而来,运行结果如下
回调函数的参数个数是可变的
1、第一个参数是整体的匹配结果;
2、其中 p1、p2、p3、p4… 这些参数是与正则表达式中的圆括号 () 匹配结果相对应的;
3、倒数第二个参数是整体匹配的开始索引;
4、最后一个参数是原始字符串 str 的值
function replacer(match, p1, p2, p3, offset, string) {
console.log(match, p1, p2, p3, offset, string)
// p1 is nondigits, p2 digits, and p3 non-alphanumerics
return [p1, p2, p3].join(' - ');
}
var newString = '007abc12345#$*%'.replace(/([^\d]+)(\d+)([^\w]+)/, replacer);
console.log(newString); // abc - 12345 - #$*%
新、旧字符串及回调函数的执行条件
对上例再做修改,运行结果如下
可以看出
1、回调函数执行的条件是匹配成功,如果不匹配则不会执行;
2、执行 replace() 进行替换操作时,并不会更改原始字符串(本例 oldString 始终不变)
function replacer(match, p1, p2, p3, offset, string) {
console.log('找到', p1, p2, p3)
return [p1, p2, p3].join('_');
}
var oldString = '007abc12345#$*%';
var newString = oldString.replace(/([^\d]+)(\d+)([^\w]+)/, replacer);
console.log(oldString,(oldString===newString?'=':'!='),newString);
oldString = '007abc12345xyz#$*%';
newString = oldString.replace(/([^\d]+)(\d+)([^\w]+)/, replacer);
console.log(oldString,(oldString===newString?'=':'!='),newString);
本作品采用《CC 协议》,转载必须注明作者和本文链接