【发布时间】:2011-12-23 21:23:51
【问题描述】:
我无法使用 C# 从 HTML 页面中删除所有 javascript。我有三个正则表达式删除了很多但也错过了很多。使用 MSHTML DOM 解析器解析 javascript 会导致 javascript 实际运行,这是我试图通过使用正则表达式来避免的。
"<script.*/>"
"<script[^>]*>.*</script>"
"<script.*?>[\\s\\S]*?</.*?script>"
有谁知道我缺少什么导致这三个正则表达式缺少 JavaScript 块?
我要删除的示例:
<script src="do_files/page.js" type="text/javascript"></script>
<script src="do_files/page.js" type="text/javascript" />
<script type="text/javascript">
<!--
var Time=new Application('Time')
//-->
</script>
<script type="text/javascript">
if(window['com.actions']) {
window['com.actions'].approvalStatement = "",
window['com.actions'].hasApprovalStatement = false
}
</script>
【问题讨论】:
-
你能举一个错过区块的例子吗?
-
使用 HTML 解析器(如 Nokogiri)并修改 DOM; do not use a regex 在原始 HTML 上。您是尝试在 Web 浏览器客户端还是在服务器上执行此操作?如果是服务器,什么编程语言?
-
如果有的话,看起来你的正则表达式会比你想要的匹配更多。你的 #2 正在做一个贪婪的
.*,所以它会匹配从页面上的第一个<script>到最后一个</script>的所有内容,可能包括你没有的内容 between 脚本标签意思是删除。 -
语言是 C#。使用 mshtml 解析器实际上运行 java 脚本,这是我试图通过首先删除它来避免的。
-
Regex 对 PARSING HTML 不是特别好——但那是因为 HTML 允许嵌套构造(如
<span><b><i><u>hello <span class="mundo">world</span></u></i></b></span>)脚本标签基本上没有嵌套,所以它远不及相关的(注释或 CDATA 标记经常在脚本标记中使用,但这些都不是一个不容忽视的挑战)。 REMOVING 或 STRIPPING HTML 稍有不同,因为表达式的复杂性可以大大降低。
标签: c# javascript regex