【问题标题】:Regex to remove empty html tags, that contains only empty children正则表达式删除空的 html 标签,只包含空的孩子
【发布时间】:2013-11-13 10:26:34
【问题描述】:

我需要解析一个 HTML 字符串并删除所有只包含空子元素的元素。

例子:

<P ALIGN="left"><FONT FACE="Arial" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="1"><B></B></FONT></P>

不包含任何信息,必须替换为&lt;/br&gt;

我写了一个这样的正则表达式:

<\w+\b[^>]*>(<\w+\b[^>]*>\s*</\w*\s*>)*</\w*\s*>

但问题是它只捕获了三个级别中的两个级别。在上面的示例中,&lt;p&gt; 元素(最外面的元素)未被选中。

你能帮我解决这个正则表达式吗?

【问题讨论】:

  • 为正则表达式+HTML问题的反对票做好准备
  • 字体元素自 HTML3 以来已被弃用,为什么您仍在使用它?
  • stackoverflow.com/q/3129738/612202 你应该更喜欢得票更多的答案。
  • 这是重点,我想摆脱它。我有一个较旧的数据库,从中获取此信息。有一些格式保存为文本的注释,我想摆脱无用的元素和字体元素。我用跨度替换它们

标签: javascript jquery html regex


【解决方案1】:

这个正则表达式似乎有效:

/(<(?!\/)[^>]+>)+(<\/[^>]+>)+/

查看live demo 并附上您的示例。

【讨论】:

  • 谢谢。这就是我一直在寻找的:)。完美的正则表达式!
【解决方案2】:

使用 jQuery 并解析所有子项。对于每个孩子,您必须检查 .html() 是否为空。如果是 -> 使用 .remove() 删除当前元素(如果需要,也可以删除父元素)。

对每个字符串执行:

var appended = $('.yourparent').append('YOUR HTML STRING');

appended.children().each(function () 
{
    if(this.html() === '')
    {
        this.parent().remove(); 
    }
});

如果有空子项,这将首先添加项目并删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2011-04-16
    • 2014-01-29
    相关资源
    最近更新 更多