Задать вопрос
pesh1983
@pesh1983
Team Lead

Как найти строки, в которых отсутствует строка?

Всем привет! Хочу найти тэги якорей, в которых не прописано событие onclick. Например, нужно найти:
<a ...>
но исключить
<a ... onclick=...>
Пытаюсь сделать это регулярками, но опыт работы с ними практически нулевой. Почитал доку, пытаюсь использовать регулярку вида
<a .*(?!onclick).*>
Но она почему-то не работает, как надо. Подскажите, как лучше составить регулярку для данного решения и что конкретно не так в моей конструкции? По доке вроде все правильно
  • Вопрос задан
  • 2224 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@wncm
Во первых, ".*" - жадный поиск, то есть в него попадет и "onclick" и ">". Но даже если заменить ".*" на ".*?", то условие "(?!onclick)" всё равно будет "съедаться" точкой (иначе было бы, если вместо условия было выражение ".*?onclick").
Я тоже не слишком разбираюсь в регулярных выражениях, но вот, вроде, рабочий вариант:
<a ((?!onclick).)*?>
Хотя выглядит криво как-то. Наверняка можно сделать изящнее.

Вообще лучше убрать отрицание из регуляторки и переложить в код. В зависимости от языка, могут быть разные способы сделать это, но самый очевидный и рабочий везде - сначала найти все якоря, а после исключить якоря с "onclick". Что-то вроде:
data.findall("<a .*?>").replace("<a .*?onclick.*?>", "")
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы