使用Regex删除脚本标记

ami*_*tre 6 c# regex

我正在尝试使用我在本网站上找到的正则表达式,它似乎不起作用.有任何想法吗?

输入字符串:

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)

YOU*_*YOU 9

RegexOptions.Singleline

RegexOptions.IgnoreCase | RegexOptions.Singleline
Run Code Online (Sandbox Code Playgroud)

这将永远不会影响到一个.

<script
>
alert(1)
</script
/**/
>
Run Code Online (Sandbox Code Playgroud)

因此,查找HTML Agility PackHTML解析器


cod*_*ict 8

正则表达式失败的原因是您的输入有newlines,并且元字符.与它不匹配.

要解决此问题,您可以使用RegexOptions.SinglelineS.Mark所说的选项,或者您可以将正则表达式更改为:

"<script[\d\D]*?>[\d\D]*?</script>"
Run Code Online (Sandbox Code Playgroud)

用来[\d\D]代替..

\d是任何数字并且\D是任何非数字,因此[\d\D]是数字或非数字,实际上是任何字符.


Nig*_*gel 5

如果您确实想要清理 html 字符串(并且您正在使用 .NET),请查看Microsoft Web Protection Library

Sanitizer.GetSafeHtmlFragment(untrustedHtml);
Run Code Online (Sandbox Code Playgroud)

这里有一个描述。