使用HTML Agility Pack从Javascript中提取lang和lat

时间:2012-04-28 09:13:55

标签: asp.net regex html-agility-pack

我想使用HTML敏捷包从以下html中提取Long和Lat:

<script type="text/javascript">
  var map = new google.maps.Map($("canvas"), {zoom : 14, mapTypeControl : false, draggable: true, scrollwheel : false, mapTypeId : google.maps.MapTypeId.HYBRID, center : new google.maps.LatLng(45.4623, -77.5425)});
</script>

即,我需要填充2个单独的变量,一个值为45.4623,另一个值为-77.5425

有人可以帮忙吗?我的正则表达能力也不是很好。 : - (

2 个答案:

答案 0 :(得分:1)

在不了解网站的情况下,很难说出如何匹配。但是,这可能会奏效。

HtmlDocument doc = new HtmlDocument();
//Load your website...
//doc.Load(....
HtmlNode scriptNode = doc.DocumentNode.SelectSingleNode("//script[contains(text(),'google.maps.Map']");
Match match=      Regex.Match(scriptNode.InnerText, "\\.LatLng\\((?<Lat>-?[\\d.]+), (?<Lng>-?[\\d.]+)\\)");
string latitude = match.Groups["Lat"].Value;
string longitude = match.Groups["Lng"].Value;

仅在您使用的脚本标记是包含文本google.maps.Map的第一个标记时才有效。

答案 1 :(得分:0)

HtmlAgilityPack非常适合解析角括号节点,但它对节点内的JavaScript语法一无所知。你最好在“LatLng \(([^ \]] +)\)”上运行正则表达式匹配并提取Match.Groups [1] .Value。