是否有可能开发快速、安全、流式正则表达式 HTML 缩小?

Is it possible to develop fast, safe, streaming regex HTML minification?

我知道,永远不要用正则表达式解析 HTML。解析是获得真正有效 HTML 缩小的唯一途径。

但如果我不那么担心完美呢?我只想从我的 HTML.

中获得合理数量的白色 space

我不想将正则表达式应用于大量文件,而是想将其应用于文件块流。

我目前的解决方案很简单:

(?<=>)\s+(?=<)

这会找到在打开和关闭 HTML 标签之间有一个以上 space 的任何地方,例如> <。我将所有匹配项替换为 " "(单个 space)。

我的问题是

  1. 这里安全吗?即在典型的 HTML 中有什么可能会破坏吗?
  2. 我能否在不牺牲安全性的情况下获得更好的性能(速度 and/or 更多匹配)?

(P.S.: 我已经将它应用到一个大约 500kb 的文件。它变成了 350kb。使用外部压缩器将它变成了 340kb。我很高兴节省了 150kb 并且不用担心额外的 10kb。)

视情况而定。考虑这个 HTML 片段:

<div> 
    <p>Some paragraph here</p>
    <div data-rel="some data > < here"> 
        <p>some subparagraph here</p>
    </div>
</div>

此处您的表达式也与某些潜在重要数据属性中的 > < 相匹配(参见 a demo here)- 这可能会也可能不会破坏您的代码(广告 1.)

关于您的第二个问题(广告 2.),匹配通常比环视更快,因此您也可以这样写:

>\s+<

并将其替换为

><

查看 reduction in steps 与此处第一个表达式的比较(259 对 28 步,减少约 90%)。