Захватить группу, когда в ней существует негативный прогноз - PullRequest
2 голосов
/ 19 сентября 2019

Я хотел бы захватить группу, но только когда указанной строки нет в ней (2 варианта).

Здесь я нахожусь: /src=\"([^"](?!js|pdf))*\"/

Это то, что яwant:

<img src="/Storage/shot.png"/>  
=>  /Storage/shot.png

<script src="/whatever/file.js">  
=>  (Nothing here)

Но на практике я получаю только последнюю букву захваченной группы.Как мне это исправить?

Смотрите здесь: https://regex101.com/r/M9szpw/2

1 Ответ

1 голос
/ 20 сентября 2019

([^"](?!js|pdf))* в вашем шаблоне - это группа повторных захватов .Он соответствует одному символу, отличному от "[^"]), за которым сразу не следует js или pdf (см. (?!js|pdf) lookahead), и каждый раз перезаписывает ноль или более этих символовзначение группы в буфере памяти группы.

Вы можете использовать

src="(?![^"]*(?:js|pdf)")([^"]*)"

См. Демонстрационную версию regex

Подробности

  • src=" - буквальная src=" строка
  • (?![^"]*(?:js|pdf)") - отрицательный прогноз, который не соответствует совпадению, если непосредственно справа от текущего местоположения есть 0+ символов, отличных от ", сопровождаемых js или pdf, а затем " char
  • ([^"]*) - группа 1: любые 0+ символов, кроме "
  • " - " char.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...