我想将所有~(.+?)
替换为(.+?).not()
。
问题是,str.replace(/~\(.+?\)/, ".not()")
当然也会替换.+?
匹配的文字。在一个完美的世界里,我会这样做:
str.replace(/~\(.+?\)/, match + ".not()")
。
JS中的等价物是什么?我宁愿不循环比赛。
答案 0 :(得分:2)
您可以在替换中使用搜索模式进行反向引用匹配,第一个匹配组使用$1 $2 $3
等,第二个匹配组,依此类推。如果没有捕获组,您可以使用$&
进行整个模式匹配,以避免添加额外的数据。
所以在这种情况下你可能想要:
str.replace(/~(\(.+?\))/, "$1.not()")
注意:其他正则表达式引擎使用$0
进行整个模式匹配,因此请小心。反向引用语法有很大不同,实际上 - sed更喜欢符号\1 \2 \3
而不是$1 $2 $3
答案 1 :(得分:1)
您需要在要保留的部分周围使用capturing group,然后在替换调用中引用组#。此外,还需要g
修饰符来替换所有匹配项。
var r = '~(foo) and ~(bar) and ~(baz)'.replace(/~(\(.+?\))/g, '$1.not()')
console.log(r) //=> '(foo).not() and (bar).not() and (baz).not()'
答案 2 :(得分:0)