使用Regex删除脚本标记

时间:2010-03-24 07:23:55

标签: c# regex

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

输入字符串

sFetch = "123<script type=\"text/javascript\">\n\t\tfunction utmx_section(){}function utmx(){}\n\t\t(function()})();\n\t</script>456";

正则表达式

sFetch = Regex.Replace(sFetch, "<script.*?>.*?</script>", "", RegexOptions.IgnoreCase);

4 个答案:

答案 0 :(得分:9)

添加RegexOptions.Singleline

RegexOptions.IgnoreCase | RegexOptions.Singleline

这将永远无法跟进。

<script
>
alert(1)
</script
/**/
>

所以,找一个像HTML Agility Pack

这样的HTML解析器

答案 1 :(得分:8)

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

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

"<script[\d\D]*?>[\d\D]*?</script>"

使用[\d\D]代替.

\d是任意数字,\D是任何非数字,因此[\d\D]是数字或非数字,实际上是任何数字。

答案 2 :(得分:4)

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

Sanitizer.GetSafeHtmlFragment(untrustedHtml);

有一个描述here

答案 3 :(得分:1)

这有点短:

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

"<[^>]*>[^>]*>"