我有以下格式输入来自GET方法的网址
rec_test.html?emotion=Happy&myInputs_1%5B%5D=things&myInputs_1%5B%5D=are&myInputs_1%5B%5D=working&myInputs_2%5B%5D=i&myInputs_2%5B%5D=hope&myInputs_3%5B%5D=so
我正在尝试使用以下代码解析它:
function getParameterByName(name){
var url = window.location.search;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)");
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
但是当我将myInputs_1
传递给函数时,它返回null。
我不知何故计划以以下格式生成输出:
myInput_1 = ['things', 'are', 'working']
myInput_2 = ['i', 'hope']
myInput_3 = ['so']
但我无法提取个别值。有没有办法实现所需的输出?
edit_1
我了解到%5B
为[
而%5D
为]
,但即使我将myInput_1[]
作为参数传递给函数,它仍会返回null ,我不知道为什么
答案 0 :(得分:2)
您可以使用URLSearchParams实例的URL对象:
s = "http://example.com/rec_test.html?emotion=Happy&myInputs_1%5B%5D=things&myInputs_1%5B%5D=are&myInputs_1%5B%5D=working&myInputs_2%5B%5D=i&myInputs_2%5B%5D=hope&myInputs_3%5B%5D=so"
url = new URL(s)
searchParams = url.searchParams
console.log(searchParams.getAll("myInputs_1[]"))
// ["things", "are", "working"]
答案 1 :(得分:1)
使用.exec
到find successive matches时,您需要执行while循环。另外,我简化了你的正则表达式。
function getParameterByName(name){
var url = decodeURIComponent(window.location.search);
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "=([^&#]*)", 'g');
var match, result = [];
while ((match = regex.exec(url)) !== null)
result.push(match[1]);
return result;
}
除非您的浏览器兼容性对您很重要,否则我建议您使用Jean的答案。
答案 2 :(得分:0)
非正则表达方式
function getParamByName(name){
var value = []
paramsArray = decodeURIComponent(window.location.search).split("?")[1].split("&")
paramsArray.forEach(function(d){
if(d.indexOf(name) > -1){
value.push(d.split("=")[1])
}
})
return value;
}