【问题标题】:Most efficient way to strip comments from a string javascript [duplicate]从字符串javascript中删除注释的最有效方法[重复]
【发布时间】:2013-07-22 16:48:27
【问题描述】:

我正在寻找一种从 HTML 的字符串表示中去除 HTML cmets 的有效方法:

<div>
  <!-- remove this -->
  <ul>
    <!-- and this -->
    <li></li>
    <li></li>
  </ul>
</div>

我不想将字符串转换为实际的节点,内容原本是字符串,文件大小在 600mb 左右。

想知道是否有人以前遇到过这个问题并找到了一个有效且易于推广的解决方案。

【问题讨论】:

  • 可以接受正则表达式吗?
  • 绝对,首选
  • 如果你没有像 &lt;div title="z&lt;!--this is not"&gt;&lt;div title="a comment--&gt;zz"&gt; 这样的讨厌的标记(注意,这个 is 是有效的 HTML)那么正则表达式是可以接受的,因为 cmets 是不可嵌套的 (@987654323 @ 与 &lt;!-- &lt;!-- --&gt; --&gt;“相同”。如果你这样做了,或者如果你担心你可能会,除其他原因外,请考虑使用更广泛的工具,例如解析器。
  • @acdcjunior &lt;!-- &lt;!-- --&gt; --&gt;&lt;!-- &lt;!-- --&gt; 相同。第一个也解析为{ignored} --&gt;,第二个解析为{ignored},其中{ignored} 是HTML 解析器忽略的部分。这正是因为 cmets 不可嵌套。
  • @dtech 你是对的。我错误地表达了自己。我的意思是最初的部分是一样的。正如您所说,这意味着第二个 --&gt; 不会成为评论的一部分,因此正则表达式不必介意嵌套。 (编辑:现在没关系,我刚刚测试过,&lt;!-- aa &lt;!-- aa --&gt;not valid HTML 正如我预测的那样。它产生错误 The document is not mappable to XML 1.0 due到评论中的两个连续连字符。在第二个--,意味着评论中的两个连字符只允许关闭它,没有别的。)

标签: javascript html string


【解决方案1】:

假设变量 s 代表您的 html 字符串,如下所示的 RexExp 替换应该可以正常工作。

s = s.replace(/<!--[\s\S]+?-->/g,"");

变量 s 现在应该已删除 cmets。

【讨论】:

  • 会测试,虽然我确信这可能是最好的解决方案
  • 请注意 HTML cmets 中的 -- 的问题,根据 MDN:developer.mozilla.org/en-US/docs/Web/API/Comment#Specification 是“禁止的”,但规范允许,尽管它指出某些工具可能不允许它们.当我偶尔尝试注释掉 script 标签时,这让我很不爽
  • 禁止“--”适用于 XML 文档,而不是 HTML 文档。再次阅读您的链接。
猜你喜欢
  • 2016-08-31
  • 2010-11-10
  • 2015-08-16
  • 2015-11-11
  • 2013-09-18
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 2018-01-01
相关资源
最近更新 更多