регулярное выражение (?) для извлечения URL-адреса из другого URL-адреса

Мне нужно проверить, есть ли 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(/*  ??? */)
        }
    }

Я не уверен, что это будет сделано только в регулярном выражении, как мне это сделать?


person laggingreflex    schedule 12.10.2013    source источник
comment
Это вообще допустимый URL? Спецификации http не совсем легко читать, но не следует ли http://innerURL.com/innerParameter1 кодировать URL?   -  person pixelistik    schedule 12.10.2013


Ответы (4)


Нерегулярное выражение, предполагая, что синтаксис довольно статичен:

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

inner будет ложным, если внутренний URL-адрес не найден, или строка внутреннего URL-адреса, если она

person MDEV    schedule 12.10.2013

Что-то из строк:

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];
    }
}
person OneOfOne    schedule 12.10.2013
comment
[&$] неверно - $ так не работает. Я бы предложил /u=(http:[^&]+)/ - person georg; 12.10.2013
comment
Он также извлекает /u= - person laggingreflex; 12.10.2013
comment
Да, часть u=, но это может измениться, сек. - person OneOfOne; 12.10.2013
comment
Проверьте обновленный ответ, в основном он будет соответствовать последней строке, начинающейся с http - person OneOfOne; 12.10.2013

Ты можешь использовать:

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

Попробуй это

/^[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/'
person Mina    schedule 12.10.2013