我试图从表单序列化字符串中提取用户ID,这是我到目前为止所做的。
拿
var dataString = "viewUsers_length=10&id%5B%5D=8163&id%5B%5D=8188&id%5B%5D=8141"
作为示例字符串。
我把它分成像这样的数组
var arrStr = dataString.split(/[=&]/);
导致数组
[0]viewUsers_length
[1]10
[2]id%5B%5D
[3]8163
[4]id%5B%5D
[5]8188
[6]id%5B%5D
[7]8141
但我只想要ids(8163,8188,8141)
实际上,这个字符串可以包含数千种这种格式的ID。到目前为止,我已经花了一些时间在Google上搜索,并且找不到任何我认为可行的内容。
答案 0 :(得分:1)
不幸的是因为id的参数名称都是相同的,解析查询字符串的常规方法可能不可行。所以,这可能是正则表达式的工作!
var dataString = "viewUsers_length=10&id%5B%5D=8163&id%5B%5D=8188&id%5B%5D=8141";
var regex = /&id%5B%5D=(\d+)/g;
var match;
var matches = [];
while (match = regex.exec(dataString)) {
matches.push(match[1]);
}
console.log(matches)
var list = matches.join(', ');
document.getElementById('output').innerHTML = list;
<div id="output"></div>
答案 1 :(得分:0)
过滤数组。
的原生JavaScript方式var dataString = "viewUsers_length=10&id%5B%5D=8163&id%5B%5D=8188&id%5B%5D=8141"
var arrStr = dataString.split(/[=&]/);
var tester = /\d{4}/;
arrStr.filter(function (item) {
return tester.test(item);
});
/*
viewUsers_length
10
id%5B%5D
8163 -Match
id%5B%5D
8188 -Match
id%5B%5D
8141 -Match
*/
以及使用$().filter()
答案 2 :(得分:0)
有几种方法可以解决这个问题。我将使用的第一种方法是将ID与正则表达式匹配。
var ids = dataString.match(/id%5B%5D=[0-9]+/g);
哪会导致
["id%5B%5D=8163", "id%5B%5D=8188", "id%5B%5D=8141"]
所以现在我们有了值,但我们只想要它的数字部分。因此,让我们使用map
删除其余的
ids = ids.map(function (id) {
return id.replace('id%5B%5D=', '');
});
另一种方法就是过滤你已经构建的数组,但是你可以看到你在第二个索引中有10个,这将作为误报返回,所以我认为这将提供一个更清晰的数据集
答案 3 :(得分:0)
我会分开“&amp;”然后映射一个函数来删除“=”之前的所有内容,最后过滤以删除不是id元素的元素。我的子串函数有点粗糙,可以用更多的可能值知识来改进(或用正则表达式替换)。
dataString
.split("&")
.map(function(elt){return elt.startsWith("id") ? elt.substring(9,13) : ""})
.filter(function(elt){return elt != ""})
答案 4 :(得分:0)
试试这个
var dataString = "viewUsers_length=10&id%5B%5D=8163&id%5B%5D=8188&id%5B%5D=8141";
var myRegexp = /id%5B%5D=([0-9]+)/g;
match = myRegexp.exec(dataString);
while (match != null) {
console.log(match[1]);
match = myRegexp.exec(ddd);
}
输出
8163
8188
8141