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

时间:2017-10-06 19:52:24

标签: html regex minify

我知道,不应该用正则表达式解析HTML。解析是获得真正有效的HTML缩小的唯一方法。

但如果我不担心完美呢?我只想从HTML中获得合理数量的空白。

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

我目前的解决方案就是:

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

找到打开和关闭HTML标记之间有多个空格的任何地方,例如> <。我将所有匹配替换为" "(单个空格)。

我的问题是

  1. 这样安全吗?即,这可能会破坏典型HTML中的任何内容吗?
  2. 我可以在不牺牲安全性的情况下获得更好的性能(速度和/或更多匹配)吗?
  3. (PS:我已将它应用到一个大约500kb的文件。它达到了350kb。使用外部缩小器将它调到340kb。我对150kb的节省感到非常满意,并且不太担心额外的10kb 。)

1 个答案:

答案 0 :(得分:1)

这取决于。请考虑此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%)。