我不太了解正则表达式,我正在尝试从一些提取的页面文本中获取所有脚本标记。我尝试过以下模式:
<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? (注意:我确实希望在结果中保留外部脚本标记。)
答案 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");
注意,两者都是未经测试的......