【问题标题】:regexp(?) for Extract a URL from another URLregexp(?) 用于从另一个 URL 中提取 URL
【发布时间】:2013-10-20 10:07:01
【问题描述】:

我需要检查一个 URL 中是否有一个 URL,如果有,提取它(内部 URL)。

所以,我需要检查这是否是 URL 中的 URL

http://www.outerURL.com/outerParameter1/x?u=http://innerURL.com/innerParameter1&outerParameter2/

并提取

http://innerURL.com/innerParameter1

没有 jquery。这适用于客户端 javascript。

并希望使它适合这个模板

var link;
link = document.body.getElementsByTagName("a")

for (var i = 0; i < link.length; i++) {
    if (
            // URL checking here
        ){
        //replacing here
        link[i].href = link[i].href.replace(/*  ??? */)
        }
    }

我不确定这是否会单独在正则表达式中完成,我应该怎么做?

【问题讨论】:

  • 这甚至是一个有效的 URL 吗? http 规范不是很容易阅读,但 http://innerURL.com/innerParameter1 不应该被 URL 编码吗?

标签: javascript regex url


【解决方案1】:

以下内容:

var links = document.body.getElementsByTagName("a");

for (var i = 0; i < links.length; i++) {
    var link = link[i].href,
        m = s.match(/.(http[^&]+)/); //link.match(/u=/u=(http:[^&]+)/);
    if (m){
        link.href = m[1];
    }
}

【讨论】:

  • [&amp;$] 不正确 - $ 不能这样工作。我建议/u=(http:[^&amp;]+)/
  • 它还提取出/u=
  • 是的,u= 部分,但可以更改,秒。
  • 检查更新的答案,基本上它会匹配最后一个以http开头的字符串
【解决方案2】:

非正则表达式,假设语法是相当静态的:

var inner = link[i].href.indexOf('http://',1);
inner = inner>-1 ? link[i].href.substr(inner,link[i].href.indexOf('&',inner)-inner) : false;

如果没有找到内部 URL,inner 将为 false,如果找到则为内部 URL 字符串

【讨论】:

    【解决方案3】:

    试试这个

    /^[A-Z].+\?[A-Z]=(.*)&/gim
    

    http://regex101.com/r/dF3rN5

    Javascript

    url = 'http://www.outerURL.com/outerParameter1/x?u=http://innerURL.com/innerParameter1&outerParameter2/';
    
    replace = url.replace(/^[A-Z].+\?[A-Z]=(.*)&/gim, '$1');
    
    // returns 'http://innerURL.com/innerParameter1outerParameter2/'
    

    【讨论】:

      【解决方案4】:

      你可以使用:

      link[i].href = link[i].href.replace(/^.*?[?&]u=(http:.+?)(?:&.*|\/?)$/i, '$1');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-17
        • 2019-11-03
        • 1970-01-01
        • 1970-01-01
        • 2013-05-06
        • 1970-01-01
        • 1970-01-01
        • 2017-05-21
        相关资源
        最近更新 更多