日期:2014-05-18  浏览次数:20886 次

正则表达式过滤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);