如何使用RegEx将文本附加到匹配项?

时间:2015-02-20 18:47:20

标签: javascript regex

我想将所有~(.+?)替换为(.+?).not()

问题是,str.replace(/~\(.+?\)/, ".not()")当然也会替换.+?匹配的文字。在一个完美的世界里,我会这样做:

str.replace(/~\(.+?\)/, match + ".not()")

JS中的等价物是什么?我宁愿不循环比赛。

3 个答案:

答案 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)

您可以使用反向引用:

/~(\(.+?\))/

此处示例:https://www.regex101.com/r/cE9nC5/1