var str = "xx2016xx2017";
str = str.replace(/(\d+)/g,function(){
console.log(arguments[1])
console.log(RegExp.$1)
})
为什么结果是2016 2017 2017 2017 不应该是2016 2016 2017 2017么
var str = "xx2016xx2017";
str = str.replace(/(\d+)/g,function(){
console.log(arguments[1])
console.log(RegExp.$1)
})
为什么结果是2016 2017 2017 2017 不应该是2016 2016 2017 2017么
你如果这样写,就得到你要的结果了
var str = "xx2016xx2017";
str = str.replace(/(\d+)/g,function(re,$1){
console.log(arguments[1])
console.log($1)
})
2016 2016 2017 2017
你的这样的结果的原因是:
当执行 replace
对应的正则表达式时,因为是全局的会执行匹配两次 ,而RegExp.$1
代表的是:返回上一次正则表达式匹配中的第一个分组。
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答843 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
就 ES6 来说(ES5 逻辑也应该类似)
RegExp.prototype[@@replace]
覆盖了默认的 replace 算法http://www.ecma-international...
可以看到,这里是把正则完全匹配一遍再来替换的
所以不要用全局的结果,替换函数提供了参数可以用
https://developer.mozilla.org...