我正在尝试使用我在本网站上找到的正则表达式,但它似乎不起作用。有什么想法吗?
输入字符串:
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);
答案 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>"
或
"<[^>]*>[^>]*>"