寻找一个正则表达式来解析JS的参数字符串

时间:2012-05-10 15:24:12

标签: javascript regex

我无法找到正则表达式从查询字符串中获取参数值:

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

3 个答案:

答案 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 + "=([^&]*)";