2015-07-07 3 views
5

Я хочу получить способ получить весь контент между одним открытым тегом span и тегом close. Проблема в том, что когда-нибудь я могу иметь вложенный диапазон, и я хочу быть уверенным, что мое регулярное выражение не останавливает первый конечный интервал, который он видит.Использование XRegExp.matchRecursive для вложенных пролетов

Чтобы увидеть мою проблему взглянуть на это: Regex101 : nested span

Я хочу быть уверен, что я получаю все между открытым и с закрывающим тегом. независимо от того, сколько </span> Я могу найти внутри.

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

Я использую метод XregExp.matchRecursive. В этом примере они дают начальный тег и конечный тег. Мой стартовый тег немного сложный, он выглядит так: <span style=\\?"color:([a-zA-Z\s]*?)\\?">. Проблема заключается в том, когда я выполняю этот метод с этим разделителем, я получаю эту ошибку: строка содержит несбалансированные разделители. Тестируемая строка:

<p style=\"text-align:justify\"> 
    <span style=\"font-size:12pt\"> 
     <span style=\"color:Green\"> 
      <span style=\"font-family:Verdana\">There is some content for a mm advertisment.There is some co</span> 
      <span style=\"font-family:Times New Roman\">ntent for a mm advertisment.</span> 
     </span> 
    </span> 
</p> 

Я думаю, что моя проблема в том, что в регулярном выражении я использую в качестве стартового разделителя. Как объясняют в doc, мы должны добавить уровень escape-косая черта в регулярном выражении. Вот почему я пытаюсь использовать это регулярное выражение как разделитель начала: <span style=\\\\?"color:([a-zA-Z\\s]*?)\\\\?">. Все еще не работает. Я не вижу, как я могу это сделать, чтобы найти этот метод, чтобы найти все между диапазоном, у которого есть атрибут стиля цвета и его тег close.

Возможно, у кого-нибудь есть решение?

+0

Почему вы используете для этого регулярные выражения? Если это допустимый HTML, используйте функции DOM. –

+0

Конечно, с jquery я могу сделать это в одной строке кода с помощью метода html(). Но мне нужно сделать эту серверную часть в среде Wakanda. – Ganbin

+0

Я не говорю о jquery, чистый JavaScript тоже может это сделать; конечно, это также доступно в серверной среде. –

ответ

1

Так блок вы удара является ошибка «строка содержит непарные разделители».

Это связано с тем, что ваш разделитель начала совпадает только с одним из тегов начала прогона в тестовом входе (тот, который указывает цвет), но ваш конечный разделитель соответствует всем четырем тегам концевого диапазона.

Я думаю, вам придется подойти к этому, сначала сопоставив все теги span (с найденной библиотекой), а затем перепрограммируйте, чтобы найти те, которые вам интересны.

1

Возможно ли использовать какой-либо синтаксический анализатор, который является более мощным, чем регулярные выражения? Последние, вообще говоря, не очень подходят для синтаксического анализа нерегулярных языков, хотя они могут обеспечить определенные расширения по сравнению с «чистыми» регулярными выражениями в теоретическом смысле.

+0

OP использует XRegExp, который (как я понимаю) _ ** является более мощным, чем использование только регулярных выражений. В стороне, дальнейшие комментарии от ОП исключали использование еще более подходящего инструмента для его/ее прецедента. (Увы.) – randomsimon