【问题标题】:Regex for removing all attributes from a paragraph用于从段落中删除所有属性的正则表达式
【发布时间】:2015-02-22 15:21:13
【问题描述】:

我知道通常不应该使用正则表达式来解析 html 内容。在我的特殊情况下,我需要它们 (原因是,我使用的是 rte 编辑器,当粘贴到编辑器中时,需要对段落属性进行一些替换)。

我有类似的东西

<p attribute1="val1" attribute2="val2" attribut="val3" ...>text blah blah</p>

我需要去掉所有属性以便我得到

<p>text blah blah</p>

如何使用正则表达式来做到这一点?

从所有可能的 html 标记中去除属性的解决方案也很受欢迎。

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    这样的东西应该适用于所有标签:

    replace(/<\s*(\w+).*?>/, '<$1>')
    

    仅对于段落,只需替换 \w:

    replace(/<\s*p.*?>/, '<p>')
    

    开头的\s* 允许标签名称前有空格,所以如果你出于某种原因有&lt; p class="foo"&gt;,它也可以。

    【讨论】:

    • 我只对段落使用什么?
    • &lt; p class="foo"&gt; 不是有效的 HTML
    • 请注意,要对 所有 匹配项进行这项工作,您可能必须通过以下方式指定 global 标志:string.replace(/&lt;\s*(\w+).*?&gt;/g, '&lt;$1&gt;')string.replace(new RegExp(/&lt;\s*(\w+).*?&gt;/, 'g'), '&lt;$1&gt;')
    【解决方案2】:

    因为 html 标记在标记名称前不能有空格并且可以连续多行,所以我建议改为:

    replace(/<(\w+)(.|[\r\n])*?>/, '<$1>');
    

    仅适用于段落:

    replace(/<p\s+?(.|[\r\n])*?>/, '<p>');
    

    【讨论】:

    • 工作,但如果要清理整个 html,请记住添加 g (//g)。
    【解决方案3】:
    perl -lpe 's/(<\w+)\s+[^>]*/$1/'
    

    【讨论】:

    • 抱歉,没有看到 javascript 标签。如前所述,使用 Tatu 的 sol'n,它也允许在开头留出空间。
    猜你喜欢
    • 2016-03-30
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2016-01-10
    • 2021-12-22
    相关资源
    最近更新 更多