使用正则表达式提取URL变量

10

我有以下的URL

http://www.test.info/link/?url=http://www.site2.com

如何使用正则表达式在javascript中获取url参数的值?

谢谢

5个回答

20
function extractUrlValue(key, url)
{
    if (typeof(url) === 'undefined')
        url = window.location.href;
    var match = url.match('[?&]' + key + '=([^&]+)');
    return match ? match[1] : null;
}
如果您想匹配来自当前访问页面的 'url',则应该按以下方法使用该方法:
var value = extractUrlValue('url');
否则您可以传递自定义的URL,例如:
var value = extractUrlValue('url', 'http://www.test.info/link/?url=http://www.site2.com

14

1
如RFC中所述:https://tools.ietf.org/html/rfc3986#section-3.3 分号(';')字符也可以用于分隔参数,因此我认为正则表达式模式应该是 url.match(/url=([^&;]+)/)[1] - TMKasun
这也会匹配像example.com/notthisurl=match&url=wontmatch这样的内容,这是一个意外的行为。为了解决这个问题,我可以想象一个正则表达式,像这样url.match(/(\?|&)url=([^&]+)/)[2] - Alejo Anibal

3

3

首先,这是整个查询字符串吗?如果是的话,你只需要按“=”分割即可:

url.split('=')[1];

否则,您可能需要使用Jordan的正则表达式。

0

关于答案代码:

function extractUrlValue(key, url)
{
    if (typeof(url) === 'undefined')
        url = window.location.href;
    var match = url.match('[?&]' + key + '=([^&#]+)');
    return match ? match[1] : null;
}

如果key是URL中的最后一个参数,并且此后有一个锚点 - 它会返回value#anchor作为值。正则表达式'[?&]' + key + '=([^&#]+)'中的#将防止这种情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接