如何使用Regex从某些文本中提取脚本标记?

时间:2010-08-12 12:54:33

标签: c# regex c#-2.0

我不太了解正则表达式,我正在尝试从一些提取的页面文本中获取所有脚本标记。我尝试过以下模式:

<script.*?>.*?</script>

但是这似乎没有返回任何包含任何代码的脚本标记。即它来自以下内容:

<script type="text/javascript" src="Scripts/Scipt1.js"></script>
<script type="text/javascript" src="Scripts/Scipt2.js"></script>

<script type="text/javascript">
   function SomeMethod()
   {

   }
</script>

我只会得到以下结果:

<script type="text/javascript" src="Scripts/Scipt1.js"></script>
<script type="text/javascript" src="Scripts/Scipt2.js"></script>

我如何归还所有3? (注意:我确实希望在结果中保留外部脚本标记。)

3 个答案:

答案 0 :(得分:2)

默认情况下,.不匹配换行符,因此您只能获得单行结果。

使用RegexOptions.Singleline来解决此问题。它会更改.的含义以匹配任何字符,包括换行符,因此您也可以获得多行匹配。

不要被名字弄糊涂。另外,请不要将它与RegexOptions.Multiline混淆,后者完全不同(请阅读IntelliSense工具提示以查找)。

答案 1 :(得分:1)

您应该使用HTML Agility Pack

例如:

var doc = new HtmlDocument();
doc.Parse(source);

var scripts = doc.DocumentNode.Descendants("script"); 

答案 2 :(得分:0)

取决于HTML的质量。

var scripts = XDocument.Parse(HTMLSTRING).Descendants("SCRIPT");

编辑:Pre Xml.Linq版本:

XmlDocument xDoc = new XmlDocument();
xDoc.Load(HTMLSTRING);
XmlNodeList scripts = xDoc.SelectNodes("//*/SCRIPT");

注意,两者都是未经测试的......