使用javascript

时间:2016-03-03 16:46:18

标签: javascript arrays

我试图从表单序列化字符串中提取用户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上搜索,并且找不到任何我认为可行的内容。

5 个答案:

答案 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)

过滤数组。

使用Array.prototype.filter()

的原生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()

的jQuery方式

答案 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