Regex захватывает слишком много текста

Допустим, у меня есть следующий текст:

foo bar baz <!-- USERNAME --> <!-- ACCESS_KEY --> baz bar foo

<!--:USERNAME-->

<!-- eueuteh -->

 -DarchetypeVersion=<!-- java-version --> -UserName=<!-- :USERNAME --> -DsauceAccessKey=<!-- ACCESS_KEY --> 

Что я хочу сделать, это заменить <!-- USERNAME --> с каким-то другим текстом. К сожалению, созданное мной регулярное выражение на самом деле не работает так, как задумано, а, например, заменяет целое <!-- java-version --> -UserName=<!-- :USERNAME --> выражение. Первые два случая заменены правильно. Где ошибка?

Вот что я тестировал в консоли javascript:

var re = new RegExp('(<!--)(.)*(USERNAME)(.)?(-->)');

2 ответа

Решение

Я использую описанную ниже технику с такими вещами, как HTML, XML и аналогичными (хотя это и плохая практика, когда речь идет о вложенном контенте)

Regex

(<[^>]*)(USERNAME)([^>]*>)


демонстрация

http://regex101.com/r/lI8cV8

Правильное выражение выглядит так:

/<!--(.(?!-->))*USERNAME.*?-->/g
Другие вопросы по тегам