我正在开发其他人构建的代码库,搜索功能使用它来从url获取参数作为搜索值。我已经尝试重新编写它,修改它,以及其他所有可能的东西,并且无法弄清楚函数中的reutrn值发生了什么。
这是函数
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
console.log(name);
var regex = new RegExp("[\\?&#;]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
console.log(results);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
var part = getParameterByName('part_name');
location.search的值为?part_number=1234&go=GO
然后在输入框part_name
中,如果我输入1234作为传入参数的值,它将只显示12.但是输入其他随机数时,它有时会正确地显示它们。如果我输入124作为搜索参数,则它会正确显示为对124进行搜索。
这些正则表达式中的一个是否有可能导致此问题,或者这是服务器端的问题? PHP在后端似乎很好,但我对Javascript代码中使用的正则表达式并不精明。
修改:
测试代码段:
function getParameterByName(loc, name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
document.getElementById("res").innerHTML += "Name: " + name + " - ";
var regex = new RegExp("[\\?&#;]" + name + "=([^&#]*)"),
results = regex.exec(loc);
document.getElementById("res").innerHTML += results + "<br/>";
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
var part = getParameterByName('?part_number=1234&go=GO', 'part_number');
var part2 = getParameterByName('?part_name=12&go=GO', 'part_name');
<div id="res"/>