您可以将id
和name
对与以下正则表达式进行匹配:
我正在尝试从url查询参数解析数组。网址如下,其中包含在查询参数中指定的emp对象的数组。
http://localhost:8080/list?emp[0].id=21&emp[0].name=john&emp[1].id=22&emp[1].name=tom
有人可以通过解析此类查询参数(可能带有一些ReGEX)并返回如下数组的函数来帮助我)>
[{id:'21',name:'john'},{id:'22',name:'tom'}]
注:
查询参数中可以提及任意数量的emp对象,例如,我刚刚添加了两个。我一直在寻找类似的解决方案,但似乎都没有一个返回在查询参数中使用索引值指定其对象的数组。因此,请不要将问题标记为重复
Edit:我编写了以下函数,该函数可用于获取简单的查询参数,但不适用于上述在查询参数中指定的对象数组。
中指定的emp对象数组。export const getQueryParamByName = (name, url) => { if (!url) url = window.location.href; name = name.replace(/[[\]]/g, '\\$&'); const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'); const results = regex.exec(url); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); }
我正在尝试从url查询参数解析数组。网址如下所示,其中包含在查询参数http:// localhost:8080 / list?emp [0] .id = 21&emp [...
您可以将id
和name
对与以下正则表达式进行匹配:
(emp\[\d+]\.)id=(\d+)&\1name=([^&]+)
(demo)
然后遍历matchAll()
返回的所有此类匹配以构建id名称对象的数组:
matchAll()
我试图创建一个通用函数来处理问题:
const extractObjects = url => {
const regex = /(emp\[\d+]\.)id=(\d+)&\1name=([^&]+)/g;
const result = [];
for (const match of url.matchAll(regex)) {
result.push({id: match[2], name: match[3]});
}
return result;
}
const url = 'http://localhost:8080/list?emp[0].id=21&emp[0].name=john&emp[1].id=22&emp[1].name=tom';
const objects = extractObjects(url);
console.log(objects);
它将从查询字符串创建具有所有属性的对象,提供的示例查询字符串将生成以下对象:
var url = '?person[0].name=Jack&person[0].id=1&person[1].name=Jonathan¬e=book';
function removeFirstChar (string) {
var tmp = string.split('');
tmp.splice(0 , 1);
return tmp.join('');
}
function parse (url) {
url = removeFirstChar(url);
var queryParamsArray = url.split('&');
var object = {};
for (var i = 0; i < queryParamsArray.length; i++) {
var queryParamArray = queryParamsArray[i].split('=');
var re = /\[(\d*)\]/;
if (re.test(queryParamArray[0])) {
var reString = /\w+/g;
var base = (((queryParamArray[0].split('.'))[0]).match(reString))[0];
var property = (queryParamArray[0].split('.'))[1];
if (!object[base]) {
object[base] = [];
}
const urlParts = re.exec(queryParamArray[0]);
const index = urlParts[1];
if (object[base][index]) {
object[base][index][property] = queryParamArray[1];
} else {
object[base][index] = {
[property]: queryParamArray[1]
}
}
} else {
object[queryParamArray[0]] = queryParamArray[1];
}
}
return object;
}
我将分享我的尝试:
{
person: [
{
name: 'Jack',
id: '1'
},
{
name: 'Jonathan'
}
],
note: 'book'
}
您可以将id
和name
对与以下正则表达式进行匹配:
我试图创建一个通用函数来处理问题:
我将分享我的尝试: