是否有可能开发快速、安全、流式正则表达式 HTML 缩小?
Is it possible to develop fast, safe, streaming regex HTML minification?
我知道,永远不要用正则表达式解析 HTML。解析是获得真正有效 HTML 缩小的唯一途径。
但如果我不那么担心完美呢?我只想从我的 HTML.
中获得合理数量的白色 space
我不想将正则表达式应用于大量文件,而是想将其应用于文件块流。
我目前的解决方案很简单:
(?<=>)\s+(?=<)
这会找到在打开和关闭 HTML 标签之间有一个以上 space 的任何地方,例如> <
。我将所有匹配项替换为 " "
(单个 space)。
我的问题是
- 这里安全吗?即在典型的 HTML 中有什么可能会破坏吗?
- 我能否在不牺牲安全性的情况下获得更好的性能(速度 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%)。
我知道,永远不要用正则表达式解析 HTML。解析是获得真正有效 HTML 缩小的唯一途径。
但如果我不那么担心完美呢?我只想从我的 HTML.
中获得合理数量的白色 space我不想将正则表达式应用于大量文件,而是想将其应用于文件块流。
我目前的解决方案很简单:
(?<=>)\s+(?=<)
这会找到在打开和关闭 HTML 标签之间有一个以上 space 的任何地方,例如> <
。我将所有匹配项替换为 " "
(单个 space)。
我的问题是
- 这里安全吗?即在典型的 HTML 中有什么可能会破坏吗?
- 我能否在不牺牲安全性的情况下获得更好的性能(速度 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%)。