从html文件中获取javascript代码
本文关键字:javascript 代码 获取 html 文件 | 更新日期: 2023-09-27 18:00:23
我正试图使用C#和正则表达式从html文件中获取javascript代码。我现在使用的代码如下:
string js = Regex.Replace(code, @"^.*?'<script's?.*?'>((.|'r'n)+?)'<'/script'>.*$", "$1", RegexOptions.Multiline);
但当我使用它时,我会得到完整的html代码,其中去掉了脚本标记。
有人能帮我吗?
我现在使用html敏捷包,代码如下:
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);
}
但只有最后一个脚本标记被替换。之前的javascript就这样消失了。
您应该看看Html敏捷包。
使用基于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");
您需要删除"^.*?"
和".*$"
,因为这就是包含所有内容的原因,并且在查找子字符串时没有理由使用Replace。使用Regex即可。比赛方法和你应该很好去。
删除.*(使用以下正则表达式:'<script's?.*?'>((.|'r'n)+?)'<'/script'>
)