【问题标题】:JS: How to remove style tags and their content from an HTML string, using regular expressions?JS:如何使用正则表达式从 HTML 字符串中删除样式标签及其内容?
【发布时间】:2018-09-06 20:55:08
【问题描述】:

我需要多次从 html 字符串中删除样式标签的全部内容。我不能使用 DOM 解析器。

在 JavaScript 中我怎么能做到这一点?

【问题讨论】:

  • 您的用例是什么?为什么不能使用 dom 解析器?
  • 因为我正在获取巨大的 html 文件,并且我想在 Cheerio 中解析它们之前将它们从垃圾中剔除,希望它能改善我在 Nodejs 中的内存消耗问题。我正在构建一个并行执行大量 http 请求的网络爬虫,并且一些站点的 html 文件最多包含 200 万个字符(如我所说,大部分是垃圾)。我希望在解析 DOM 之前去除垃圾,可以改善我的记忆状况。
  • 所以你已经使用了一个DOM解析器(cheerio),但是你对它的内存消耗有疑问?然后您应该考虑修改解析器,以便它立即删除样式(以及您认为“垃圾”的所有其他内容),而不是将其附加到其 DOM,而不是尝试使用正则表达式。 (为什么是正则表达式!?)

标签: javascript regex


【解决方案1】:

对于那些在 2020 年登陆这里的人来说,这对我有用。

string.replace(/(<style[\w\W]+style>)/g, "")

正如Bergi 在OP cmets 中提到的那样,如果没有更好的选择,这应该被视为最后的手段。 RegEx 不是处理 HTML 的最佳方式。

【讨论】:

  • 小心这个。如果您有多个 &lt;style&gt; 标签,它将清除第一个和最后一个标签之间的任何内容。
【解决方案2】:

    var string = "<style>someHTMLStuff</style> non style <html>stuff</html>"

    var s = string.replace(/<style.*?<\/style>/g, '')
    
    console.log(s);

我假设您希望删除整个样式标签,而不仅仅是其内容

编辑:引号

【讨论】:

  • 对我不起作用。是否可能需要一些调整,因为字符串会分成多行?
  • @sheff2k1 javascript 正则表达式不使用引号,更新了我的答案
【解决方案3】:

&lt;style([\S\s]*?)&gt;([\S\s]*?)&lt;\/style&gt;

https://regex101.com/r/C28OPE/1

即使有多个标签,这也对我有用。 credit

【讨论】:

    【解决方案4】:

    替换 HTML 元素 (innerHTML) 中的所有样式属性:

    <div id="el">
      <p style="font-weight:bold">Line 1</p>
      <p style="color:red">Line 2</p>
    </div>
    
    //script
    let element = document.getElementById('el')
    element.innerHTML.replace(/style=\".*"/gm,'')
    

    这将删除 id el 元素中的所有元素样式属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 2011-11-05
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 2013-07-03
      相关资源
      最近更新 更多