使用像“HorsieDoggieBirdie”这样的字符串,是否有一个非捕获正则表达式替换会杀死“Horsie”和“Birdie”,但保持“Doggie”完好无损?我只能想到一个捕获解决方案:
s/(Horsie)(Doggie)(Birdie)/$2/g
是否有非捕获解决方案,如:
s/Horsie##Doggie##Birdie//g
其中##是正则表达式代码的一些组合?具体问题在于JavaScript(innerHTML.replace
),但我也会提出Perl建议。
答案 0 :(得分:5)
您无需捕获Horsie
或Birdie
。
s/Horsie(Doggie)Birdie/$1/g;
类似的东西也适用于Javascript。这可能和它一样有效,并且至少和使用环视断言一样快;虽然如果你想确切知道,你应该对它进行基准测试。 (结果当然取决于所讨论的小跑,小狗和小鸟。)
强制免责声明:当您使用带HTML的正则表达式时,您应该知道what happens
答案 1 :(得分:4)
您可以使用Look-Around Assertions:
s/(?:Horsie(?=Doggie))|(?:(?<=Doggie)Birdie)//g;