匹配所有JavaScript块

时间:2014-11-10 09:19:10

标签: c# regex

我试图匹配html文件中的所有JavaScript块。

目前我正在使用:

 content = Regex.Replace(content, "<script.*type=\"text/javascript.*</script>", String.Empty);

 content = Regex.Replace(content, @"<script\s*.*type=\'text/javascript\s*.*\s*</script>", String.Empty);

但是,例如,我无法匹配此字符串:

<script src="http://mediamond.js.ad.dotandad.com/MediamondAds.js" language="javascript" type="text/javascript" id=
"mediamondBaseJS"></script>

我错过了什么?

修改

我已经尝试了你的建议,这是一个更接近解决方案的步骤,但现在它太贪婪了(或者在行的开头</script>可能会产生一些问题?)

我正在使用:

Regex.Match(content, @"<script[\s\S]*?type='text/javascript[\s\S]*?</script>", RegexOptions.Singleline).Value

我也尝试过行首^

但现在匹配太长(忽略第一个</script>!):

<script type="text/javascript" language="javascript">
var mediamondAd=new MediamondAds();
mediamondAd.setTagPfx("br_fol_for_mi");
</script>
<!-- MEDIAMOND END -->

<div align="center" style="padding-top: 10px;"><script type='text/javascript'><!--// <![CDATA[
    OA_show(26);  
// ]]> --></script>

1 个答案:

答案 0 :(得分:2)

点角色不符合换行符。您的html在language属性和结束脚本标记之间有换行符。请考虑使用此代码:

<script[\s\S]*?type=\"text\/javascript[\s\S]*?</script>

\s = whitespaces (including line breaks)
\S = non-spaces
? = non-greedy so it stops looking when it gets the first type attribute / first closing </script> tag