如何使用javascript获取参数(参数名称包含)?

时间:2013-07-23 09:03:30

标签: javascript regex

我使用以下方法按名称获取参数:

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

我想知道如何更改它以获取包含某些字符串的参数,例如,我想获取包含单词“document”的参数,但整个参数名称不是“document”。

请告知,谢谢。

2 个答案:

答案 0 :(得分:1)

喜欢这个吗?

 val = location.search.match(/document.*?=([^&]*)/)[1]

虽然我宁愿使用一个将整个查询字符串转换为对象(如this one)的函数,但之后只需应用一个过滤器:

params = urlParams()
ks = Object.keys(params).filter(function(k) { return k.indexOf("document") >= 0 })
if(ks)
   value = params[ks[0]];

通过这种方式,您可以轻松支持多个参数(如document1=foo&document2=bar中所示)并避免丑陋的动态正则表达式构造。

在旧版浏览器中,您可以使用此代替Object.keys / filter:

ks = []
for(var k in params)
     if(k.indexOf("document") >= 0)
        ks.push(k);

答案 1 :(得分:1)

建议:

function getParameterByPartialName(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regex = new RegExp("[\\?&][^&#]*" + name + "[^=]*=([^&#]*)"),
        results = regex.exec(location.search);
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

但是,这只会返回第一个匹配项,可能会有更多具有相似名称的参数。您可以为所有匹配返回一组键值对。