我使用以下方法按名称获取参数:
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”。
请告知,谢谢。
答案 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, " "));
}
但是,这只会返回第一个匹配项,可能会有更多具有相似名称的参数。您可以为所有匹配返回一组键值对。