@WebSeoLab

Как выбрать img и figure когда они смешаны (регулярка)?

Всем привет. Я новичок и только начинаю осваивать регулярки, но попалась задача которую надо решить и я уже голову сломал, пока что не получается. И помочь никто не может.

Задача для случая когда: в старых статьях (я в качестве CMS работаю с WP) где использовались img - обычная вставка изображений, но добавили новый код который оборачивает изображения в метатеги для shema.org и все это дело еще и обернули в figure.

Надо собрать порядок изображений в котором они стоят.

пример:
<img>
<img>
<figure><img> </figure>
<img>


При сборе должно получиться:
<img
<img
<figure
<img


Решил собирать регуляркой только до конца не могу ее осилить. Вот что получилось:
(<[\s]*(?![\/])figure.*?)|(([^<.*figure.*>\w])(<[\s]*(?![\/])img.*?)([^<.*\/*figure.*>]))

В первой части выделяю просто все figure:
(<[\s]*(?![\/])figure.*?) //эта часть рабочая

Во второй части выделяю img которые не обрамлены тэгом figure:
(([^<.*figure.*>\w])(<[\s]*(?![\/])img.*?)([^<.*\/*figure.*>]))

При подобном варианте вроде как работает, хоть и с оговорками:
< figure >< img >< / figure > //так сработает - выделит отдельностоящие img (хоть и как то криво) и выделит только тэг figure в смешанном варианте

Если же есть пробел уже не сработает и будет определять img обрамленный figure
< figure > < img > < / figure > //так уже нет

------------------------------------------------------------------------------------------

Полный пример на что должно срабатывать (но выделяет и img и figure, а должно только figure):
<figure itemprop="associatedMedia image" itemscope="" itemtype="https://schema.org/ImageObject"> <meta itemprop="representativeOfPage" content="true"> <img itemprop="contentUrl url" src="//site.com/url.jpg" title="" alt="">  <meta itemprop="name" content=""> <meta itemprop="width" content=""> <meta itemprop="height" content=""></figure>


------------------------------------------------------------------------------------------------------------------------------------------------

Собранный пример для тестов: https://regex101.com/r/PC4AFn/1
  • Вопрос задан
  • 193 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы