Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用RegExp获取url参数_Javascript_Regex - Fatal编程技术网

Javascript 使用RegExp获取url参数

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");

我试图编写一个函数来返回给定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;
}
现在我在两种情况下使用这个函数,参数可以是“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;
}