Javascript 使用RegExp获取url参数
我试图编写一个函数来返回给定url参数的参数值 我使用参数名作为字符串调用函数,并希望返回一个数字(-string) 这就是我想到的:Javascript 使用RegExp获取url参数,javascript,regex,Javascript,Regex,我试图编写一个函数来返回给定url参数的参数值 我使用参数名作为字符串调用函数,并希望返回一个数字(-string) 这就是我想到的: function getParam(param) { param = param .replace(/\[/g, "\\[") .replace(/\]/g, "\\]"); var paramReg = new RegExp(param + "=([0-9]+)", "g");
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;
}
现在我在两种情况下使用这个函数,参数可以是“tid”或“field_date_value[value][year]”。它在“tid”上似乎工作得很好,但我对它在“field_date_value[value][year]上的工作方式有问题,我不明白为什么
控制台给了我以下关于
“?字段\日期\值\操作=%3D&字段\日期\值[值][年]=2015&tid=8”
但是如果我像这样切换参数位置,它会返回正确的值
“?字段\日期\值\操作=%3D&tid=8&字段\日期\值[值][年]=2015”
谁能说出我错过了什么
谢谢,
Tom如果您使用的是原生js,请查看此处;如果您使用的是jQuery,请查看此处。您需要在[和]转义正则表达式中使用
“\\\\[”
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;
}
下面是一个工作示例:
函数getParam(param){
param=param.replace(/(?:\[\\\%5B)/g,“\\\\[”)。replace(/(?:\]\\\;%5D)/g,“\\\\]”);
var paramReg=newregexp(“[\\?&]”+param+“=([0-9]+)”,“g”);
var result=paramReg.exec(“http://google.com?field_date_value_op=%3D&field_date_value[价值][年度]=2015年,工贸总产值=8”);
console.log(参数+”:“+结果);
返回结果;
}
document.getElementById(“res”).innerHTML=getParam('field_date_value%5b value%5D[year]”);
第一个链接几乎就是我现在正在做的,而且也不起作用。第二个链接可能是我想要实现的解决方案,但要复杂得多,我仍然不明白为什么我的正则表达式在这一个上不能正常工作。当我将url字符串更改为location.search时,这不起作用。无法找出原因…请重试n现在,我更新了代码段并添加了您的固定函数。实际上,我刚刚在“location.search”中发现这些“[”和“]”实际上是“%5B”和“%5D”。因此,问题从来不是正则表达式本身,而是我正在搜索的字符串。感谢您将我带到这一点。首先应该检查这一点。我刚刚使第二个正则表达式中的组无法捕获,因此现在是最终结果。
tid: tid=8,8
field_date_value\[value\]\[year\]: field_date_value[value][year]=2015,2015
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;
}