我正在尝试使用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刚刚消失。
答案 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\>
)