我看到很多类似的问题,但仍未找到答案 应该如何看待正则表达式,需要替换HTML中的所有空格(包括换行符),但忽略标记?
目前我使用Regex.Replace(content, @"\s+", "");
但是删除页面上存在的JavaScript中的空格,而不是页面不起作用。
谢谢。
编辑:在回复中提出一些问题之后,这里有一些细节: 我正在做的是HTTP模块,“缩小”我们网站上的HTML输出。我们有一个网站,内容非常动态,来自许多不同的来源。最终目标是减少页面大小并减少网络流量。这是一个高负荷的网站,所以完成它对我们很重要。
实际上我们正在使用MbCompression库进行JS和CSS缩小,但它不支持缩小HTML输出(至少我没有找到)。
答案 0 :(得分:1)
实际上没有办法写一个(合理的)正则表达式来做这件事。特别是如果你想支持javascript和css。你需要一个真正的解析器。
答案 1 :(得分:1)
你的目标是什么?浏览器在渲染页面时忽略了很多空格,所以我猜你想清理你的源代码。如果是,请检查您使用的程序是否提供了一些解决方案。例如,Dreamweaver有一个重新格式化源代码的工具。
Tidy可能是一个选项,但它看起来不仅仅是一个简单的代码格式化工具。
答案 2 :(得分:1)
如果你能找到一个像样的HTML解析器,我会通过DOM操作来实现。如果你不能,那么
Regex.Replace(content, "(?i)(<script(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</script\\s*>|<style(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</style\\s*>|<textarea(?:[^>\"']|\"[^\"]*\"]|'[^']*')*>)\s+</textarea\\s*>|</?[a-z](?:[^>\"']|\"[^\"]*\"]|'[^']*')*>|\\S+)|\\s+", "$1");
应该这样做。它不会删除标记内部或嵌入式JS,CSS或textareas内部的空格,但会删除文本节点中的换行符。
答案 3 :(得分:0)
Regex.Replace(document.body.innerHTML, @"\s+", "");
使用document.body.innerHTML
可能会有效。我不确定。
答案 4 :(得分:0)
当然,至少应该用空格替换它,而不仅仅是完全删除空格。对于应该没问题的HTML,但如果你在谈论在javascript中使用多个空格没有折叠的字符串那么你需要考虑另一种方法,因为无论你是在脚本,字符串等中,正则表达式都不会很容易解决
有人说过,我不确定这样做的理由是什么。如果您担心文件的大小,那么只需告诉您的服务器使用压缩,我怀疑现在每个浏览器都支持得很好,并且页面基本上会被服务器压缩并在客户端上解压缩。它对服务器的工作要多一些,所以它取决于你是否更关心带宽或CPU。
答案 5 :(得分:0)
Regex.Replace(html, "\s*(<[^>]+>)\s*", "$1", RegexOptions.SingleLine);
存在与标签,未封闭标签等相关的风险。我希望您可以控制来自不同来源的“动态内容”。我也希望你已经尝试了其他一切,这是最后的手段。