Регулярное выражение JavaScript - группировка, один или более символов, исключая заданные строки символов

0

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

JavaScript, потому что проблема запускается в HTML-редакторе браузера веб-клиента.

Разбитый HTML является конкретным - любой текст между закрывающим LI и закрывающим списком UL или OL, который неправильно сформирован как элемент списка.

Например, этот фрагмент здесь, из большего примера под ним:

    </li>
        bbb<strong>bbbb</strong><strong>bbb&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;"><em>bbbbb</em></span></strong>=0==
</ul>

Вот полный пример того, где может существовать проблема:

<ul>
    <li>1111</li>
    <li>Could be anything here</li>
    <li>aaaa</li>
        bbb<strong>bbbb</strong><strong>bbb&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;"><em>bbbbb</em></span></strong>=0==
</ul>
<ol>
    <li>more?<li>
    <li>echo</li>
</ol>

Это то, что я намереваюсь, чтобы HTML выглядел, используя match + replace.

<ul>
    <li>1111</li>
    <li>Could be anything here</li>
    <li>aaaabbb<strong>bbbb</strong><strong>bbb&nbsp;&nbsp;&nbsp; <span style="text-decoration: underline;"><em>bbbbb</em></span></strong>=0==
</ul>
<ol>
    <li>more?<li>
    <li>echo</li>
</ol>

Несколько выражений, которые я пробовал, следующие, но в зависимости от этих (или небольших вариантов), я слишком много согласен или не правильно или что-то в этом роде:

/<\/li>.*?<\/[ou]l>/mig
/<\/li>([\s\n]*[\w!\.?;,<:>&\\\-\{\}\[\]\(\)~#'"=/]+[\s\n]*)+<\/[ou]l>/mig
/<\/li>([\s\n]*[^\s\n]+[\s\n]*)+<\/[ou]l>/i

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

  • 0
    Я оставил закрывающий тег </ LI> вне поля «Это то, что я хочу, чтобы HTML выглядел». Последний элемент списка должен иметь <li> aaaabbb <strong> bbbb </ strong> <strong> bbb & nbsp; & NBSP; & NBSP; <span style = "text-ornament: underline;"> <em> bbbbb </ em> </ span> </ strong> = 0 == </ li>
  • 0
    Argh! НЕ используйте regex для разбора HTML bro, используйте HTML parser . Ну, это может быть другой случай, когда вы пытаетесь восстановить поврежденный HTML, но действительно ли одна и та же проблема возникает много раз при использовании регулярных выражений ? Также кажется, что вы хотели удалить закрывающий тег </li> , что можно сделать с помощью простого текстового редактора и ctrl+f с replace, который не требует никаких шаблонов и не должен испортить ваш HTML.
Показать ещё 2 комментария
Теги:

1 ответ

0

он рекомендовал использовать подход, основанный на dom, для определения html

используя jQuery:

$('ul>:not(li)').wrapAll('<li></li>');
  • 0
    Проблема может заключаться в том, что вы не можете быть уверены, какую именно структуру DOM вы будете получать, когда браузер разрешит анализировать недопустимый HTML. (Хотя для HTML5 это должно быть указано явно.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню