我正在尝试使用我在本网站上找到的正则表达式,它似乎不起作用.有任何想法吗?
输入字符串:
sFetch = "123<script type=\"text/javascript\">\n\t\tfunction utmx_section(){}function utmx(){}\n\t\t(function()})();\n\t</script>456";
Run Code Online (Sandbox Code Playgroud)
正则表达式:
sFetch = Regex.Replace(sFetch, "<script.*?>.*?</script>", "", RegexOptions.IgnoreCase);
Run Code Online (Sandbox Code Playgroud)
加 RegexOptions.Singleline
RegexOptions.IgnoreCase | RegexOptions.Singleline
Run Code Online (Sandbox Code Playgroud)
这将永远不会影响到一个.
<script
>
alert(1)
</script
/**/
>
Run Code Online (Sandbox Code Playgroud)
因此,查找HTML Agility Pack等HTML解析器
正则表达式失败的原因是您的输入有newlines
,并且元字符.
与它不匹配.
要解决此问题,您可以使用RegexOptions.Singleline
S.Mark所说的选项,或者您可以将正则表达式更改为:
"<script[\d\D]*?>[\d\D]*?</script>"
Run Code Online (Sandbox Code Playgroud)
用来[\d\D]
代替.
.
\d
是任何数字并且\D
是任何非数字,因此[\d\D]
是数字或非数字,实际上是任何字符.
如果您确实想要清理 html 字符串(并且您正在使用 .NET),请查看Microsoft Web Protection Library:
Sanitizer.GetSafeHtmlFragment(untrustedHtml);
Run Code Online (Sandbox Code Playgroud)
这里有一个描述。