【问题标题】:Parse javascript value from HTML response in C#从 C# 中的 HTML 响应中解析 javascript 值
【发布时间】:2013-09-14 10:36:50
【问题描述】:

我实际上正在构建一个应用程序,通过在 .NET 4.5 中使用 HttpClient,我向网页(不是我的网页)发送 GET 请求,并在内容中收到此响应:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:widget="http://www.netvibes.com/ns/">
<head>  
<meta http-equiv="content-type" 
      content="text/html;charset=utf-8" />
<script type="text/javascript">var NREUMQ=NREUMQ||[];NREUMQ.push(["mark","firstbyte",new Date().getTime()]);</script><title>Site</title>

<script type="text/javascript">
var HOST_DOMAIN = 'http://www.site.com/';
var ID = '2261443944';
var BASE_URL = 'https://base.site.com';
</script>

  </head>
    <body >
    </body>
</html>

我想做的是以某种方式使用 .NET 4.5 库从头部的 js 脚本中解析值 HOST_DOMAIN、ID 和 BASE_URL,但我找不到方法。有什么想法吗?

【问题讨论】:

  • 你可以简单地使用像var HOST_DOMAIN = '([^']+)';这样的正则表达式
  • @Yogu 通过使用正则表达式,我只能看到上面的字符串是否包含在我的回复中,而不是将其值 ('site.com/') 存储在变量中。但是,我在正则表达式方面的经验并不多,所以如果您能扩展您的答案,我将不胜感激。

标签: c# javascript html parsing variables


【解决方案1】:

使用正则表达式捕获组中的 url。

  string pattern = @"var HOST_DOMAIN = '([^']+)';";
  Match match = Regex.Matches(html, pattern)).FirstOrDefault();
  if (match != null)
      return match.Groups[1].Value;

说明:括号定义了正则表达式中的一个组,该组存储在匹配项的Groups 属性中。

可能的问题:如果 url 包含转义的撇号,则不起作用。

【讨论】:

    【解决方案2】:

    用于主机名的正则表达式

    var ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";
    

    参考链接:Stack Overflow Hostname Regex

    然后用于数字使用 Reg Ex Number

    以及如何在 javascript 中使用 reg ex How to use regex in js

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-06
      • 2020-01-19
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多