我正在尝试编写一个函数来返回给定url参数的参数值。
我使用参数名称作为字符串调用该函数,并希望返回一个数字(-string)。
这就是我提出的:
function getParam(param) {
param = param
.replace(/\[/g, "\\[")
.replace(/\]/g, "\\]");
var paramReg = new RegExp(param + "=([0-9]+)", "g");
var result = paramReg.exec(location.search);
console.log(param + ": " + result);
return result;
}
现在我在两种情况下使用此功能,param可以是“tid”或“field_date_value [value] [year]”。它似乎在“tid”上工作正常,但我对“field_date_value [value] [year]”的工作方式有疑问,我不明白为什么。
控制台在
上给出了以下内容“field_date_value_op =%3D&安培; field_date_value [值] [年] = 2015&安培; TID = 8”
tid: tid=8,8
field_date_value\[value\]\[year\]: null
但如果我切换参数位置如
,它会返回正确的值“field_date_value_op =%3D&安培; TID = 8&安培; field_date_value [值] [年] = 2015”
tid: tid=8,8
field_date_value\[value\]\[year\]: field_date_value[value][year]=2015,2015
任何人都能说出我错过了什么?
谢谢, 汤姆
答案 0 :(得分:2)
这是固定版本。您需要在 [和] 转义正则表达式中使用"\\\["
。
function getParam(param) {
param = param.replace(/(?:\[|%5B)/g, "\\\[").replace(/(?:\]|%5D)/g, "\\\]");
var paramReg = new RegExp("[\\?&]" + param + "=([0-9]+)", "g");
var result = paramReg.exec(location.search);
console.log(param + ": " + result);
return result;
}
这是一个工作样本:
function getParam(param) {
param = param.replace(/(?:\[|%5B)/g, "\\\[").replace(/(?:\]|%5D)/g, "\\\]");
var paramReg = new RegExp("[\\?&]" + param + "=([0-9]+)", "g");
var result = paramReg.exec("http://google.com?field_date_value_op=%3D&field_date_value[value][year]=2015&tid=8");
console.log(param + ": " + result);
return result;
}
document.getElementById("res").innerHTML = getParam('field_date_value%5Bvalue%5D[year]');

<body>
<div id="res"/>
</body>
&#13;
答案 1 :(得分:0)
如果您使用的是本机j,请查看此处How can I get query string values in JavaScript?或How to get the value from the GET parameters?如果您使用的是jQuery