【问题标题】:Parsing link from javascript function从javascript函数解析链接
【发布时间】:2013-01-03 01:55:23
【问题描述】:

我正在尝试从页面内的 javascript 函数中解析出直接链接。我能够解析我需要的 html 信息,但对 javascript 部分感到困惑。这是用 php 和可能的正则表达式可以实现的吗?

function videoPoster() {
    document.getElementById("html5_vid").innerHTML = 
        "<video x-webkit-airplay='allow' id='html5_video' style='margin-top:" 
        + style_padding 
        + "px;' width='400' preload='auto' height='325' controls onerror='cantPlayVideo()' " 
        + "<source src='http://video-website.com/videos/videoname.mp4' type='video/mp4'>";
}

我需要提取的是链接“http://video-website.com/videos/videoname.mp4”。任何帮助或指点将不胜感激!

【问题讨论】:

  • 是否总是以http:// 开头并以.mp4 结尾?
  • .mp4后面其实有一个会话ID,当然每次重新加载页面都会改变。
  • @user1941752 如果您可以通过http://.mp4 的第一次出现来识别URL,那就是正则表达式擅长的。
  • @user1941752 ...任何答案都有帮助吗?

标签: php javascript regex parsing


【解决方案1】:

/http://.*\.mp4/ 将为您提供介于 http://.mp4 之间的所有字符。

See it in action.

如果您需要会话 ID,请使用类似 /http://.*\.mp4?sessionid=\d+/

【讨论】:

    【解决方案2】:

    一般来说,不会。一个完整的 javascript 解析器总是能提取 url,即使这样你也会遇到计算不平凡的 url 的麻烦。

    在实践中,通常最好使用适用于您实际需要解析的代码的最简单的捕获正则表达式。在这种情况下:

    ['"](http://[^'"]*)['"]
    

    如果您必须将该正则表达式作为字符串输入,请注意转义。

    如果您在 url 中有未转义的引号,这将失败。这是有效的,但很少见。编写您正在解析的内容的人不太可能使用它们,因为它们使引用 javascript 中的 url 变得很痛苦。

    【讨论】:

      【解决方案3】:

      对于您的具体情况,这应该可以工作,前提是 URL 中没有任何字符被转义。

      preg_match("/src='([^']*)'/", $html, $matches);
      $url = $matches[1];
      

      请参阅preg_match() 手册页。您可能应该添加错误处理,确保函数返回 1(正则表达式匹配)并可能执行一些额外的检查(例如确保 URL 以 http:// 开头并包含 .mp4?)。

      (与所有 Web 抓取技术一样,您正在抓取的网站的所有者或维护者可能会在未来进行更改,从而破坏您的脚本,您应该为此做好准备。)

      【讨论】:

        【解决方案4】:

        以下内容会捕获您的 html 中的任何 url

        $matches=array();
        if (preg_match_all('/src=["\'](?P<urls>https?:\/\/[^"\']+)["\']/', $html, $matches)){
            print_r($matches['urls']);
        }
        

        如果你想在 javascript 中做同样的事情,你可以使用这个:

        var matches;
        if (matches=html.match(/src=["'](https?:\/\/[^"']+)["']/g)){
        //gives you all matches, but they are still including the src=" and " parts, so you would
        //have to run every match again against the regex without the g modifier
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-12
          • 2015-05-25
          • 2011-12-13
          • 1970-01-01
          • 2023-03-10
          • 2015-02-21
          • 1970-01-01
          相关资源
          最近更新 更多