Мне нужно регулярное выражение для поиска HTML-кода и поиска всех тегов <img>
, у которых есть этот атрибут: class="lazy"
а не один: data-original="..."
.
Вот моя тестовая разметка:
<!-- Must match : -->
<img class="lazy" src="http://lorempicsum.com/futurama/350/200/1" alt="Lorem ipsum" />
<img class="lazy" src="http://placehold.it/640x360/abd125/fff" />
<img class="lazy" src="http://placehold.it/640x360/000/fff"
alt="Blabla" />
<!-- Must not match : -->
<img class="lazy" src="http://placehold.it/255x200/111/fff&text=loading" data-original="http://lorempicsum.com/futurama/255/200/2" width="255" height="200" alt="" />
<img src="http://placehold.it/640x360/111/fff" alt="Blabla" />
<img src="http://placehold.it/640x360/333/fff"
alt="Blabla" />
Я написал это: <img[^>]*class\s*=\s*["']lazy["'][^>]*(?!data-original)[^>]*>
Это не работает, так как он соответствует 4-м тегу, и он не должен.
Вы можете мне помочь? Благодарю.
PS Не беспокойтесь, парни, я не пытаюсь разобрать html Cthulhu Way, мне просто нужно быстро найти эти теги, чтобы исправить большое количество веб-шаблонов, это трюк с одним выстрелом...
Вам нужно как-то исправить взгляд, потому что, если он движется, вы можете пропустить часть "fail if match", и также может быть хорошей идеей поставить class='lazy'
в lookahead, а также, возможно, делай это так:
<img(?=[^>]*class\s*=\s*(["'])lazy\1)(?![^>]*data-original)[^>]*>
Таким образом, вам не нужно беспокоиться о data-original
заказа data-original
и class='lazy'
.
Вы должны проверить отрицательный lookahead (?![^>]*data-original)
именно после тега img
.
<img(?![^>]*data-original)[^>]*class\s*=\s*["']lazy["'][^>]*>