Регулярное выражение для замены слова, кроме комментариев - PullRequest
1 голос
/ 04 августа 2020

Как я могу изменить свое регулярное выражение, чтобы оно игнорировало комментарии в шаблоне на языке, который не поддерживает ретроспективный просмотр?

Мой шаблон регулярного выражения:

\b{Word}\b(?=([^"\\]*(\\.|"([^"\\]*\\.)*[^"\\]*"))*[^"]*$)
  • \ b {Word} \ b: Целое слово, {word} заменяется итеративно для списка словаря
  • (? = ([^ "" \] (\. | "" ([ ^ "" \] \.) [^ "" \]"")) [^ ""] $): ничего не заменяйте внутри кавычек

Моя цель - связать переменные и слова так, чтобы они всегда имели один и тот же регистр. Однако я не хочу вдаваться в комментарии. (IDE - отстой, и другого выхода нет)

Комментарии на этом языке начинаются с апострофа. Пример кода следует за

' This is a comment
This = "Is not" ' but this is 
' This is a comment, what is it's value?
Object.value = 1234 ' Set value
value = 123

В основном я хочу, чтобы линтер взял приведенный выше код и сказал, что слово «значение» обновит его до:

' This is a comment
This = "Is not" ' but this is 
' This is a comment, what is it's value?
Object.Value = 1234 ' Set value
Value = 123

Чтобы весь код на основе «Value» "обновляются, но ничего в двойных кавычках или в комментарии, или части другого слова, например valueadded, не будут затронуты.

Я пробовал несколько решений, но не смог заставить его работать .

  • ['. *]: Не предшествует апострофии
  • (?

1 Ответ

0 голосов
/ 05 августа 2020

Как обсуждалось в комментариях выше:

((?:\".*\")|(?:'.*))|\b(v)(alue)\b

3 части этого регулярного выражения, используемые с чередованием.

  1. Не захватывающая группа для текста в двойных кавычках , так как нам это не нужно.

  2. Группа без захвата для текста, начинающегося с одинарной кавычки

  3. Наконец, строка «значение» разделяется на две части (v) и (значение), потому что при замене мы можем использовать \ U ($ 2) для преобразования v в V и оставить как есть \ E $ 3, где \ U - преобразуется в верхний регистр, а \ E - отключает регистр .

  4. \ b \ b - границы слов используются, чтобы избежать любого отдельного текста, который не является частью установки значения.

https://regex101.com/r/mD9JeR/8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...