Решение регулярное выражение ниже будет работать в большинстве случаев, но это может сломаться, если несбалансированные одиночные кавычки появляются за пределами строки литералы, например в комментариях.
Обычный трюк регулярных выражений для соответствия строкам в контексте соответствует тому, что вам нужно заменить и сопоставить, и захватить, что вам нужно сохранить.
Вот пример Python демо:
import re
rx = r"('[^'\\]*(?:\\.[^'\\]*)*')|\b{0}\b"
s = r"""
var foe = 10;
foe = "";
dark_vador = 'bad guy'
foe = ' I\'m your father, foe ! '
bar = thingy + foe"""
toReplace = "foe"
res = re.sub(rx.format(toReplace), lambda m: m.group(1) if m.group(1) else 'NEWORD', s)
print(res)
Смотрите в Python demo
Регулярное выражение будет выглядеть
('[^'\\]*(?:\\.[^'\\]*)*')|\bfoe\b
См regex demo.
('[^'\\]*(?:\\.[^'\\]*)*')
часть захватывает Ingle кавычки строковых литералов в 1-е группы, и если они совпадают, это просто положить обратно в результат, и \bfoe\b
матчей целых слов foe
в любом другом контексте строки - и впоследствии заменяется другим словом.
ПРИМЕЧАНИЕ: Чтобы также совместить литералы с двойными кавычками, используйте r"('[^'\\]*(?:\\.[^'\\]*)*'|\"[^\"\\]*(?:\\.[^\"\\]*)*\")"
.
Опубликовать свой код проверки –
Вы не можете указать реальную ссылку на regex101, а не на экран? – RomanPerekhrest
Не размещайте скриншот - не редактируйте в коде. –