tug*_*erk 2 javascript c# regex asp.net asp.net-mvc
在ASP.NET MVC 3上,我创建了一个动作过滤器,用于从整个html中删除空白区域.它的工作方式与我预期的大部分时间相同,但现在我需要更改RegEx以便不触及pre元素内部.
我从令人敬畏的Mads Kristensen的博客中获得了RegEx逻辑,我不确定如何为此目的修改它.
这是逻辑:
public override void Write(byte[] buffer, int offset, int count) {
string HTML = Encoding.UTF8.GetString(buffer, offset, count);
Regex reg = new Regex(@"(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}");
HTML = reg.Replace(HTML, string.Empty);
buffer = System.Text.Encoding.UTF8.GetBytes(HTML);
this.Base.Write(buffer, 0, buffer.Length);
}
Run Code Online (Sandbox Code Playgroud)
过滤器的整个代码:
任何的想法?
编辑:
大注:
我的意图完全没有加快响应时间.事实上,这可能会减慢速度.我GZiped页面,这个缩小使我每页获得大约4 - 5 kb,这没什么.
使用正则表达式解析HTML非常复杂,任何简单的解决方案都很容易破解.(使用正确的工具完成工作.)话虽如此,我将展示一个简单的解决方案.
首先,我简化了你必须的正则表达式:
(?<=\s)\s+
Run Code Online (Sandbox Code Playgroud)
用空字符串替换这些匹配,以消除到处的双重空格.
假如没有<或>内部pre的标签,你可以添加(?![^<>]*</pre>)在表达式的结尾,使其失效的内部pre标签.这可以确保</pre>不跟随当前匹配,中间没有任何标记.
导致:
(?<=\s)\s+(?![^<>]*</pre>)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3055 次 |
| 最近记录: |