Протри строку, но сохрани ее среднюю часть - PullRequest
2 голосов
/ 09 ноября 2010

С такой строкой, как "HorsieDoggieBirdie", есть ли регулярное выражение без захвата, которое убило бы "Horsie" и "Birdie", но сохранило бы "Doggie" без изменений? Я могу думать только о захвате решения:

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

Есть ли решение для захвата, например:

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

где ## - это некоторая комбинация кодов регулярных выражений? Конкретная проблема в JavaScript (innerHTML.replace), но я также приму предложения Perl.

Ответы [ 2 ]

5 голосов
/ 09 ноября 2010

Вам не нужно захватывать Horsie или Birdie.

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

Аналогичная вещь должна работать и для Javascript.Это, вероятно, так же эффективно, как и получается, и, по крайней мере, так же быстро, как использование проверочных утверждений;хотя вы должны сравнить его, если хотите знать наверняка.(Результаты, конечно, будут зависеть от лошадей, собачек и птичек, о которых идет речь.)

Обязательный отказ от ответственности: вы должны знать , что происходит при использовании регулярных выражений с HTML ...

4 голосов
/ 09 ноября 2010

Вы можете использовать Подтверждающие утверждения :

s/(?:Horsie(?=Doggie))|(?:(?<=Doggie)Birdie)//g;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...