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.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
就 ES6 来说(ES5 逻辑也应该类似)
RegExp.prototype[@@replace]
覆盖了默认的 replace 算法http://www.ecma-international...
可以看到,这里是把正则完全匹配一遍再来替换的
所以不要用全局的结果,替换函数提供了参数可以用
https://developer.mozilla.org...