仅替换正则表达式匹配的一部分

时间:2012-01-24 22:39:21

标签: javascript regex

请考虑以下javascript代码:

"myObject.myMethod();".replace(/\.\w+\(/g, "xxx");

选择“myObjectxxx);”时会显示“.myMethod(”。

现在我只选择myMethod。换句话说,我想选择以.开头并以(结尾的任何字词(不包括在内)。

谢谢,卢卡。

4 个答案:

答案 0 :(得分:24)

一般答案:使用括号捕获要保留的部分,并将其作为$1包含在替换字符串中。

有关详细信息,请参阅任何regexp替换教程。

此处:只需在替换字符串中添加.(

对于练习,请编写一个正则表达式,将--ABC--DEF-- --DEF--ABC--的任意字符串变为ABC的{​​{1}}和DEF的任意字母值。因此--XY--IJK--应变为--IJK--XY--。在这里,您确实需要使用捕获组和反向引用。

答案 1 :(得分:3)

您可以使用lookaround断言:

.replace(/(?<=\.)\w+(?=\()/g, 'xxx')

这些将允许比赛成功,同时不属于比赛本身。因此,您只需更换两者之间的部分。

对于不熟悉正则表达式的人来说,更简单的选择可能只是在替换中包含.(

.replace(/\.\w+\(/g, ".xxx(")

答案 2 :(得分:1)

我建议采用略有不同的方法:

"myObject.myMethod();".replace(/^([^\.]*\.)\w+(\(.*)$/g, "$1xxx$2");

虽然提出了更简单的解决方案。

答案 3 :(得分:0)

太棒了,谢谢您有QUIT-Anony-Mousse!

我希望 123456,SomeText 成为 123456,InsertedText,SomeText

我为解决此问题所做的工作如下。归功于上面的“ Has QUIT-Anony-Mousse”。我只是给出一个如何实施他的解决方案的清晰示例。

查找:

(123456),SomeText

替换:

$ 1,InsertedText,SomeText

使用Regex从此查找和替换中获得的结果是:

123456,InsertedText,SomeText

通过使用123456左右的括号,它基本上将123456分配给了我可以通过在替换中使用“ $ 1”来使用的变量。希望有道理。再次感谢!