Я отлаживаю некоторый код JavaScript, и мне нужно идентифицировать строки, содержащие "=", за которыми следует оператор сравнения, например "==", ">", "<", "!=". Однако я хочу игнорировать строки, которым предшествует начало цикла for. Итак, я хочу идентифицировать такие строки:
x = (y > z) * 2;
но игнорируйте такие строки:
for (var i = 1; i<5; i++) {
Я считаю, что это потребует отрицательного взгляда назад. Но текст «для», который я бы поместил в отрицательный просмотр назад, не предшествует непосредственно тексту, который я хочу сопоставить.
Я попробовал это регулярное выражение в Notepad++:
(?<!for .*) = .*(==|>|<|!=)
но это было сообщено как «недействительное», потому что квантификатор внутри просмотра назад делает его нефиксированной шириной.
С другой стороны, это регулярное выражение работает, но не помогает мне, потому что «for» не предшествует непосредственно тексту, который я хочу сопоставить:
(?<!for ) = .*(==|>|<|!=)
Мы ценим любые предложения.





Попробуйте отрицательный прогноз:
^(?!.*for ).* = .*(==|>|<|!=)
Если вы не хотите сопоставлять часть «для», добавьте другую группу захвата и получите доступ/замените эту группу.
^(?!.*for ).* (= .*(?:==|>|<|!=))
Немного более надежный (терпимый к отсутствующим пробелам и <= + >=, но отвратительный):
^(?!.*?\bfor\b).*?[^\n!<>=](=[^\n=].*?(?:[<>]|[!=<>]=))
Обновлено:
Мне пришлось вставить ^, чтобы совпадение началось в начале строки. В зависимости от вашего типа регулярного выражения, ^ может полностью соответствовать началу строки или началу текста. Если это последнее, вам нужно будет использовать что-то вроде (?<=^|\n), положительный взгляд назад, вместо ^ (что работает в вашем случае для Notepad++).
@CurtisD ах, ты прав, я забыл, что мне нужно привязать его к началу строки. Смотрите мое редактирование
Спасибо за ваши предложения. К сожалению, строка, подобная следующей, которая включает цикл for, по-прежнему соответствует:
for (var i = 1; i <= 6; i++) {