Найти в html коде все тэги img без аттрибута src

Статус
В этой теме нельзя размещать новые ответы.

dwarf

Постоялец
Регистрация
12 Июн 2011
Сообщения
88
Реакции
19
Сабж, нужно заматчить все тэги img у которых не задан аттрибут src
Код:
<img width="1" />
 
Так просто составить регулярку не получится. Они ищут основываясь на том, что есть, а не чего нету. Потому предлагаю поступить по другому:
1. Ищем все рисунки с помощью регулярки "<img [^>]*>"
2. В найденных проверяем наличие "src="
 
jQuery не подойдет? Она как раз вернет набор элементов.
Код:
alert($('img[src]').size());
 
Заматчить - удалить что ли?
PHP:
$data = preg_replace_callback("@<img\s[^<>]{0,}>@", create_function('$matches', 'return preg_match("@\ssrc=@i", $matches[0]) ? $matches[0] : "";'), $data);
или
PHP:
function myFunc($matches){
  return preg_match("@\ssrc=@i", $matches[0]) ? $matches[0] : "";
}
$data = preg_replace_callback("@<img\s[^<>]{0,}>@", "myFunc", $data);
 
Парни. Круто, спасибо, но в итоге я написал сам покурив маны.
Решение найти все <img> и перебрав, найти без аттрибута src, не подходит из-за сильного снижения производительности по сравнению с одним регекспом.
все выглядит вот так:
Код:
/<img(?!.*src).*?>/i
 
Очень круто, что вы нашли решения, честно говоря не додумался до такого вариант, но советую вам его немного отредактировать, иначе не будет удалять всё. Более правильный вариант:
Код:
<img(?![^>]*src)[^>]*?>

Чем плох ваш вариант? А вот пример:
8FOvk79.png


Как видите регулярка не срабатывает для строки, в которой одновременно находятся картинки с src и без. К тому же оператор "точка" более "тяжеловесный", так как включает в себя больше вариаций.
 
Как видите регулярка не срабатывает для строки, в которой одновременно находятся картинки с src и без. К тому же оператор "точка" более "тяжеловесный", так как включает в себя больше вариаций.

О, огромное спасибо, помогли мне избавится от неприятного бага.

Вот фикс, надеюсь ничего не пропустил в этот раз:
Код:
/<img(?![^>]*src)[^>]*>/i
немного подстраховался 2-мя символьными классами.

Ахахах, не заметил у вас решения в самом начале поста, придумал почти в точности такое же, забавно)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху