读书人

正则表达式过滤html中的脚本与样式解决

发布时间: 2012-02-06 15:52:44 作者: rapoo

正则表达式过滤html中的脚本与样式
需要做1个分析出html中正文的内容(就是过滤所有的html标记,javascript脚本,css样式)
初步做法是用正则表达式获取<body>里面所有">"和"<"之间的内容(就是获取所有除标记外的内容),但是这样不能过滤javascript脚本与css样式;

网上流行的过滤javascript方式:
System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"<script[\s\S]+</script *>",System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html = regex1.Replace(html, ""); //过滤<script></script>标记

这种做法只能过滤1次javascript标记,而且当body里面开头和结尾都是脚本
<body>
<script language="javascript">
//代码
</script>
123443443r4tertfgret
<script language="javascript">
//代码
</script>
</body>

的时候正则表达式就匹配了第1个脚本的开头和最后1个脚本的结尾(就是所有内容都过滤了)



请教高手应该怎么才能过滤2段javascript同时保留2段脚本间的内容(最好能用正则表达式实现)

[解决办法]
正则要经常用“.*?”,这个可以排除重叠的情况,参考如下代码:

C# code
            string str = @"<body><script language=""javascript"">//代码</script>123443443r4tertfgret<script language=""javascript"">//代码</script></body>";            Console.WriteLine(Regex.Replace(str, @"\s*<script.*?>.*?</script>", "",                 RegexOptions.IgnoreCase | RegexOptions.Singleline));
[解决办法]
试下,把所有html标记,javascript脚本都去掉了,如果有不符合的,给出实例

C# code
string result = Regex.Replace(yourStr, @"<script[^>]*>[\s\S]*?</script>|<[^>]*>", "", RegexOptions.IgnoreCase); 

读书人网 >C#

热点推荐