擦拭绳子但保留其中间部分

时间:2010-11-09 11:59:02

标签: javascript regex perl string replace

使用像“HorsieDoggieBirdie”这样的字符串,是否有一个非捕获正则表达式替换会杀死“Horsie”和“Birdie”,但保持“Doggie”完好无损?我只能想到一个捕获解决方案:

s/(Horsie)(Doggie)(Birdie)/$2/g

是否有非捕获解决方案,如:

s/Horsie##Doggie##Birdie//g

其中##是正则表达式代码的一些组合?具体问题在于JavaScript(innerHTML.replace),但我也会提出Perl建议。

2 个答案:

答案 0 :(得分:5)

您无需捕获HorsieBirdie

s/Horsie(Doggie)Birdie/$1/g;

类似的东西也适用于Javascript。这可能和它一样有效,并且至少和使用环视断言一样快;虽然如果你想确切知道,你应该对它进行基准测试。 (结果当然取决于所讨论的小跑,小狗和小鸟。)

强制免责声明:当您使用带HTML的正则表达式时,您应该知道what happens

答案 1 :(得分:4)

您可以使用Look-Around Assertions

s/(?:Horsie(?=Doggie))|(?:(?<=Doggie)Birdie)//g;