Я хотел бы выбрать все пустые теги, которые являются либо автономными, либо вложенными в другие теги. Например, регулярное выражение должно соответствовать этому:
<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 </p>
должно совпадать <span style="background-color: red;"></span>
,
Это то, что я использую в данный момент: <[^<p>\/>][^>]*><\/[^>]+>
Тем не менее, это исключает такие случаи, как <p><strong><em></em></strong></p>
где есть несколько вложенных тегов.
Спасибо!
Эта версия должна найти как пустые абзацы, так и пустые вложенные теги внутри абзацев. Работает до уровня 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>"));
Других решений пока нет …