我无法找到正则表达式从查询字符串中获取参数值:
我需要将参数名称发送到方法并获取参数值作为字符串的结果
"p=1&qp=10"
。
我想出了以下内容:
function getParamValue(name) {
var regex_str = "[&]" + name + "=([^&]*)";
var regex = new RegExp(regex_str);
var results = regex.exec(my_query_string);
// check if result found and return results[1]
}
如果name = 'p'
,我的regex_str现在不起作用。如果我将regex_str
更改为
var regex_str = name + "=([^&]*)";
它可以为参数'qp'
name = 'p'
的值
你可以帮我用正则表达式在'&'
之后从字符串的开头搜索param名称的开头吗?
答案 0 :(得分:1)
看起来split
会更好用:
var paramsMap = {};
var params = string.split("&");
for (var i = 0; i < params.length; ++i) {
var keyValue = params[i].split("=", 2);
paramsMap[keyValue[0]] = keyValue[1];
}
如果您迫切想要使用正则表达式,则需要使用g
标志和exec
方法。
var regex = /([^=]+)=([^&]+)&?/g;
var paramsMap = {};
while (true) {
var match = regex.exec(input);
if (!match)
break;
paramsMap[match[1]] = match[2];
}
请注意,由于regex
对象变为有状态,因此您需要在运行另一个提取循环或使用新的lastIndex
实例之前重置其RegExp
属性。
答案 1 :(得分:1)
将正则表达式字符串更改为以下内容:
//pass the query string and the name of the parameter's value you want to retrieve
function getParamValue(my_query_string , name)
{
var regex_str = "(?:^|\&)" + name + "\=([^&]*)";
var regex = new RegExp(regex_str);
var results = regex.exec(my_query_string);
try
{
if(results[1] != '')
{
return results[1];
}
}
catch(err){};
return false;
}
答案 2 :(得分:1)
这可能有效,具体取决于您是否已将参数部分分开。
var regex_str = "(?:^|\&)" + name + "=([^&]*)";
or
var regex_str = "(?:\&|\?)" + name + "=([^&]*)";