0

我找不到从查询字符串部分获取参数值的正则表达式:

我需要将参数名称发送到方法并获取参数值作为字符串的结果,例如 "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改为

var regex_str = name + "=([^&]*)";

它可以'qp'为 param返回 param 的值name = 'p'

你能帮我用正则表达式'&'从字符串的开头或字符串的开头搜索参数名称的开头吗?

4

3 回答 3

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实例。

于 2012-05-10T15:28:57.983 回答
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;
}
于 2012-05-10T15:47:15.560 回答
1

这可能会起作用,具体取决于您是否分离了参数部分。

var regex_str = "(?:^|\&)" + name + "=([^&]*)";
or
var regex_str = "(?:\&|\?)" + name + "=([^&]*)";
于 2012-05-10T16:06:40.780 回答