Regex - строка соответствия со специальными символами между разделителями (html <style>tag) - PullRequest
0 голосов
/ 09 мая 2019

Я ищу решение для сопоставления тегов стиля html с произвольным текстом (также специальными символами) между ответом API, который содержит правильный шаблон html:

Часть строки:

...
Aenean <style>asdfasdf</style>lacinia bibendum <a href="/life">life</a> 
sed <style>asdfasdf</style>consectetur. 
<a href="/work">Work</a> quis risus eget urna mollis ornare 
<a href="/about">about</a> <!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]-->leo.
...

Мое регулярное выражение (пока): <style[^>]*>(.*?)<\/style>

соответствует только тегам стиля без специальных символов <style>asdfasdf</style> но все еще отсутствует на

<style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>

Для проверки: https://regexr.com/ - выражение и текст регулярного выражения, как описано выше.


Полная рабочая последовательность JavaScript для непосредственного копирования вставки в ваш код:

console.warn(value);
console.warn(/<style[^>]*>(.*?)<\/style>/gs.test(value));
value = value.replace(/<style[^>]*>(.*?)<\/style>/gs, '');
console.warn(value);
console.warn(/<style[^>]*>(.*?)<\/style>/gs.test(value));

Возвращает: строка правда строка ложь

1 Ответ

3 голосов
/ 09 мая 2019

Я думаю, вы ищете флаг регулярного выражения s, который позволяет совпадениям выходить за границы строк:

что-то вроде (?s)<style[^>]*>(.*?)<\/style>, попробуйте здесь .
(/<style[^>]*>(.*?)<\/style>/gs в синтаксисе JS)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...