Отрицательная альтернатива vscode/ripgrep
Предположим, я ищу теги изображений, используя функцию поиска vscode:<img src="images/spacer.gif width=1 height=1>
но только сопоставляя те без alt=""
тег. Как бы я это реализовал?
Я знаю, что негативные lookahead's/lookbehind's не поддерживаются в ripgrep.
^(\s*)<img src="images/spacer.gif"(?!.*alt="".*$).*$
является действительным регулярным выражением, но, увы, не работает из-за вышеуказанного ограничения. Так что же является альтернативой негативным взглядам? Грузы групп захвата?
1 ответ
Решение
Для быстрого и грязного способа вы можете использовать закаленный жадный токен:
<img(?:(?!alt=).)*?>
Смотрите демо на regex101.com.
Объяснение:
<img # match <img
(?:(?!alt=).)*? # match anything lazily, making sure there's no
# alt ahead
> # match >
Это считается плохим подходом, если вы можете ожидать что-то вроде
<img src="/some/source.png"
data="Here can be some other <strong>bolded</strong> text">
который полностью действителен. Здесь парсер может помочь.