使用RegEx获取url参数

时间:2015-04-03 07:02:39

标签: javascript regex

我正在尝试编写一个函数来返回给定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

任何人都能说出我错过了什么?

谢谢, 汤姆

2 个答案:

答案 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;
&#13;
&#13;

答案 1 :(得分:0)

如果您使用的是本机j,请查看此处How can I get query string values in JavaScript?How to get the value from the GET parameters?如果您使用的是jQuery