@belyaevcyrill

Как правильно построить регулярку?

Есть html-строка вида:
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do 
<img src="/files/60570fa5c3bef305257abd06" srcset="/files/60570fa503bef3c5257abd07 320w"> 
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, 
quis nostrud exercitation ullamco laboris nisi ut aliqu 
<img src="/files/60570f05c3bef3c5257abd78" srcset="/files/60570fa5c3bef3c5207abd90 3200w">


Не получается с помощью регулярки вида
/<img[^\>]*(src(set)?="([^"]*)")+>/g
получить для каждого img значения src и srcset одновремено. Регулярка возвращает только srcset.

Например, для
<img src="/files/60570fa5c3bef305257abd06" srcset="/files/60570fa503bef3c5257abd07 320w">

регулярка отдает только значение srcset, а нужно src и srcset одновременно. Можете подсказать что поправить?
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Короткий ответ:
/(?<=<img [^<>]*?)src(?:set)?="([^"]*)"/g

Но чем больше дополнительных условий и хотелок, тем больше доп. кода понадобится или более монструозным получится рег. выражение. Универсальный способ вряд ли получится. Всегда найдётся способ сломать регулярку.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F Куратор тега JavaScript
Не надо никаких регулярок:

const data = Array.from(
  new DOMParser().parseFromString(html, 'text/html').querySelectorAll('img'),
  n => [ n.getAttribute('src'), n.getAttribute('srcset') ]
);
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы