代码之家  ›  专栏  ›  技术社区  ›  djdd87

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

  •  2
  • djdd87  · 技术社区  · 14 年前

    我对Regex不是很了解,我正在尝试从一些提取的页面文本中获取所有脚本标记。我尝试了以下模式:

    <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 回复  |  直到 14 年前
        1
  •  2
  •   djdd87    14 年前

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

    使用 RegexOptions.Singleline 来解决这个问题。它改变了 . 匹配任何字符,包括换行符,因此也可以获得多行匹配。

    RegexOptions.Multiline ,这是完全不同的(请阅读IntelliSense工具提示以找出答案)。

        2
  •  1
  •   Timwi    14 年前

    你应该使用 HTML Agility Pack .

    例如:

    var doc = new HtmlDocument();
    doc.Parse(source);
    
    var scripts = doc.DocumentNode.Descendants("script"); 
    
        3
  •  0
  •   Robin Day    14 年前

    取决于HTML的质量。

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

    编辑:Pre-Xml.Linq版本:

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

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