从html文件中获取javascript代码

时间:2011-06-24 13:01:21

标签: c# html regex

我正在尝试使用C#和正则表达式从html文件中获取javascript代码。 我现在使用的代码如下:

string js = Regex.Replace(code, @"^.*?\<script\s?.*?\>((.|\r\n)+?)\<\/script\>.*$", "$1", RegexOptions.Multiline);

但是当我使用它时,我得到了完整的HTML代码,并删除了脚本标签。

有人可以帮我这个吗?


我现在使用html agility pack并使用以下代码:

var hwObject = new HtmlWeb();
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(code);
        foreach (var script in doc.DocumentNode.Descendants("script").ToArray())
        {
            string js = script.InnerText;
            HtmlTextNode text = (HtmlTextNode)script.ChildNodes.Single(d => d.NodeType == HtmlNodeType.Text);
            text.Text = TrimJs(js);
        }

但只有最后一个脚本标记被替换。之前的javascripts刚刚消失。

3 个答案:

答案 0 :(得分:9)

你应该看看Html Agility Pack

使用基于xml的解析器解析HTML通常比使用正则表达式更容易。

您可以使用以下内容:

HtmlWeb hwObject = new HtmlWeb();
HtmlDocument htmldocObject = hwObject.Load("http://www...");
foreach(var script in doc.DocumentNode.Descendants("script").ToArray()) 
{ 
    string s = script.InnerText;
    // Modify s somehow
    HtmlTextNode text = (HtmlTextNode)script.ChildNodes
                        .Single(d => d.NodeType == HtmlNodeType.Text);
    text.Text = s;
}
htmldocObject .Save("file.htm");

答案 1 :(得分:2)

您需要删除"^.*?"".*$",因为这就是包含所有内容的原因,并且在您查找子字符串时没有理由使用Replace。只需使用Regex.Match方法就可以了。

答案 2 :(得分:0)

删除。*(使用以下正则表达式:\<script\s?.*?\>((.|\r\n)+?)\<\/script\>