Как заменить текст в ссылке, но пропустить этот текст, который уже есть в ссылках? - PullRequest
0 голосов
/ 25 ноября 2011

Как заменить конкретный текст в ссылке, но пропустить этот текст, который уже есть в ссылках?

Пример:

<a href="helloworld.com">Lorem ipsum dolor sit amet</a>, consectetur
adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
magna aliqua. Lorem ipsum dolor sit amet, consectetur <a
href="adipisicing.com">adipisicing</a> elit, sed do eiusmod tempor
incididunt ut labore et dolore <a href="helloworld.com">magna aliqua.
Lorem ipsum</a> dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.

Как видите, мне нужно заменить "Loremipsum " to <a href="somewhere.com">Lorem ipsum</a> во втором утверждении, но пропустите " Lorem ipsum ", что уже в ссылках.

Спасибо!

1 Ответ

4 голосов
/ 25 ноября 2011

Регулярные выражения не очень хорошо подходят для работы с HTML.Каждое имеющееся у вас решение с треском провалится в комментариях, во встроенном javascript или в некорректном HTML.

Тем не менее, если вы строго контролируете структуру ваших документов, вы можете попробовать подход регулярных выражений.Чтобы соответствовать каждому «Lorem ipsum», не находящемуся внутри тега a, я бы использовал

Lorem ipsum(?=([^<]*($|<a |<[^/]|</[^a]))*($|(?<=a )))

. В этом утверждении используется прогнозное утверждение для соответствия «Lorem ipsum», если оносопровождаемый открывающим тегом a перед следующим закрывающим, или дальнейшие теги не следуют.Смотрите его в действии на RegExr .

Как вы можете видеть, вероятно, лучше использовать анализатор HTML.=)

...