Регулярное выражение соответствует ближайшим тегам <br> с группой слов между ними

Я безуспешно пытался понять это. Я просмотрел много ресурсов в Интернете, и некоторые из них близки, но не совсем точны. Скажем, у меня есть следующий код:

<br>
Message 1
<br>
<br>
Here is Message 2
<br>
<br>
Here is Message 2 (again)
<br>

Я хочу вернуть все сообщения 2 и текст между ближайшими тегами разрыва. Следующее регулярное выражение близко:

<br>[\s\S]*?Message 2[\s\S]*?<br>

Однако он возвращает следующие два блока. Блок 1:

<br>
Message 1
<br>
<br>
Here is Message 2
<br>

Блок 2:

<br>
Here is Message 2 (again)
<br>

Однако мне нужно вернуть блок 1:

<br>
Here is Message 2
<br>

Сообщения, которые я получаю, всегда представлены таким образом, поэтому я не думаю, что мне нужен анализатор HTML.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте этот шаблон регулярного выражения:

<br>((?!<br>)[\s\S])*Message 2((?!<br>)[\s\S])*<br>

Демо

Уловка, которую я здесь использую, заключается в том, чтобы смягчить .* с помощью отрицательного просмотра вперед, который утверждает, что то, что следует далее, не является маркером <br> тега. Другими словами, ((?!<br>).)* будет потреблять все, вплоть до исключения следующего тега <br>.

В качестве отказа от ответственности, как правило, мы не должны использовать регулярное выражение для анализа данных HTML. Иногда нас заставляют это делать, например если мы используем такой редактор, как Notepad ++, в котором нет анализатора HTML.

Прекрасно работает! Спасибо.

Dustin 06.04.2018 05:31

Другие вопросы по теме