#regex #regex-group #regexp-replace
#регулярное выражение #регулярное выражение-группа #регулярное выражение-заменить
Вопрос:
У меня такая ситуация, когда я пытаюсь заменить кучу тегов в блоке текста с помощью регулярного выражения, однако я также хочу разрешить пользователю избегать любых тегов.
Примечание: я хочу избегать просмотра вперед / назад, поскольку Safari его не поддерживает
Живой пример: https://regex101.com/r/mDGs3C/1
Welcome {{ PLAYER_NAME }} to the event
используя подстановку, это должно отображать
Welcome Richard to the event
Для этого я использовал следующее регулярное выражение, которое, похоже, работает правильно.
/{{s*PLAYER_NAMEs*}}/gm
Однако я также хочу, чтобы была возможность экранирования, поэтому следующее
Welcome {{ PLAYER_NAME }} to the event, you can use tags in here such as \{{ PLAYER_NAME }}
Я хочу вывести как …
Welcome Richard to the event, you can use tags in here such as {{ PLAYER_NAME }}
Итак, я попытался использовать следующее в начале моего регулярного выражения, чтобы указать, что я не хочу, чтобы оно совпадало, если оно содержит двойную обратную косую черту.
/[^\]{{s*PLAYER_NAMEs*}}/gm
Это ПОЧТИ работает, однако в некоторых сценариях оно отсекает последнюю букву предыдущего слова, взгляните на мой пример, чтобы увидеть, что e отсекается от слова welcome
Комментарии:
1. Вы уверены, что вам не нужно избегать завитушек? ie
[^\]{{s*PLAYER_NAMEs*}}
?
Ответ №1:
Захватите не-косые черты и поместите их обратно в замену:
Операция | Параметр |
---|---|
Поиск | ([^\]){{s*PLAYER_NAMEs*}} |
Заменить | $1 Richard |
Комментарии:
1. Это работает отлично, спасибо! это был просто случай добавления его в свою собственную группу, а затем убедиться, что я использую это при замене 🙂