gpt4 book ai didi

c# - 使用正则表达式删除 JavaScript

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:46 25 4
gpt4 key购买 nike

我无法使用 C# 从 HTML 页面中删除所有 javascript。我有三个正则表达式,它们删除了很多但也遗漏了很多。使用 MSHTML DOM 解析器解析 javascript 会导致 javascript 实际运行,这是我试图通过使用正则表达式来避免的。

    "<script.*/>"

"<script[^>]*>.*</script>"

"<script.*?>[\\s\\S]*?</.*?script>"

有谁知道我遗漏了什么导致这三个正则表达式遗漏了 JavaScript block ?

我要删除的示例:

<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>

最佳答案

我假设您正在尝试简单地清理 JavaScript 的输入。坦率地说,我担心这个解决方案太简单了,因为它看起来太简单了。请参阅下面的推理,在表达式之后(在 C# 字符串中):

@"(?s)<script.*?(/>|</script>)"

就是这样 - 我希望! (它当然适用于您的示例!)

我的简单推理是尝试使用正则表达式解析 HTML 的主要问题是嵌套标签的可能性——与其说是不同标签的嵌套,不如说是同义标签的嵌套

例如,

<b> bold <i> AND italic </i></b>

...还不错,但是

<span class='BoldText'> bold <span class='ItalicText'> AND italic </span></span>

会更难解析,因为结束标签是相同的。

但是,由于嵌套script是无效的标签,/> 的下一个实例(<-这有效吗?)或 </script>是这个脚本 block 的结尾。

在脚本标签中总是可能有 HTML 注释或 CDATA 标签,但如果它们不包含 </script> 应该没问题.但是:如果他们这样做,肯定有可能获得一些“代码”。我不认为页面会呈现,但一些 HTML 解析器非常灵活,所以你永远不知道。要处理一些额外的可能空白,您可以使用:

@"(?s)<\s?script.*?(/\s?>|<\s?/\s?script\s?>)"

请让我知道您是否能想出一种方法来破解它,让有效的 HTML 代码具有可运行的 JavaScript(我知道有几种方法可以一些 东西通过了,但如果它确实通过了,它应该以许多不同的方式之一被破坏,并且不应该是可运行的 JavaScript 代码。)

关于c# - 使用正则表达式删除 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8041377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com