Как выбрать пустые теги HTML, которые могут иметь несколько пустых вложенных тегов с помощью регулярных выражений?

Я хотел бы выбрать все пустые теги, которые являются либо автономными, либо вложенными в другие теги. Например, регулярное выражение должно соответствовать этому:

<p></p>
<p><strong><em></em></strong></p>
<p style="background: black;"><span></span></p>

Но не это:

<p>text</p>
<p><strong><em>text</em></strong></p>
<p style="background: black;"><span>text</span></p>

В сложной ситуации, как <p><span style="background-color: red;"></span>some text &nbsp;</p>должно совпадать <span style="background-color: red;"></span>,

Это то, что я использую в данный момент: <[^<p>\/>][^>]*><\/[^>]+> Тем не менее, это исключает такие случаи, как <p><strong><em></em></strong></p>где есть несколько вложенных тегов.

Спасибо!

1

Решение

Эта версия должна найти как пустые абзацы, так и пустые вложенные теги внутри абзацев. Работает до уровня 3 вложенных тега.

function emptyNestedTags(str)
{
var match = str.match(/<(\w+)(?:\s[^>]*)?>(?:<(\w+)(?:\s[^>]*)?>(?:<(\w+)(?:\s[^>]*)?><\/\3>)?<\/\2>)?<\/\1>/);
if (match) return match[0]; else return "no empty tags found";
}

alert(emptyNestedTags("<p id=\"id\"></p>"));
alert(emptyNestedTags("<p id=\"id\">SOME TEXT</p>"));
alert(emptyNestedTags("<p><em id=\"id\"></em></p>"));
alert(emptyNestedTags("<p><em id=\"id\">SOME TEXT</em></p>"));
alert(emptyNestedTags("<p><em id=\"id\"></em>SOME TEXT </p>"));
alert(emptyNestedTags("<p><span style=\"background-color: red;\"><em></em></span></p>"));
alert(emptyNestedTags("<p><span style=\"background-color: red;\"><em>TEXT</em></span></p>"));
alert(emptyNestedTags("<p><span style=\"background-color: red;\"><em></em></span> TEXT</p>"));
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]