我正在以status --- delimiter --- status的形式从服务器接收一个标记化的字符串,其中我可能有多达1000个状态。状态只有6种不同的可能值。我试图找到一种方法来同时搜索所有6个,这给了我每个的计数。我已经提出了几种解决问题的不太理想的方法,但我能想到的最好的方法仍然可以在字符串上进行2次完整传递并涉及几个子步骤。我查看了regX。匹配和捕获组,但似乎无法找到任何方法使这项工作比一次一个状态更好。我意识到性能差异不会引人注意,但现在我只想知道,因为理论上这应该是可行的(尽管可能不是JavaScripts regX)。
实施例 状态集:[红色,蓝色,绿色,橙色,紫色,粉红色] 分隔符(我可以选择这个):| String:red | purple | green | red | blue | orange | purple | blue
结果:[红色:2,蓝色:2,绿色:1,橙色:1,紫色,2,粉红色0]
答案 0 :(得分:1)
使用this answer中的strtok
来迭代字符串一次,依次拉出每个“令牌”(状态值),并随时增加计数。
答案 1 :(得分:1)
你的问题有点不清楚。这就是我假设你正在尝试做的事情(即。---delimiter---
被包裹在一个状态中):
var string = 'status1---delimiter---status1 asdf status1---delimiter---status1 asdf asdf fdsa status3---delimiter---status3 asdf status1---delimiter---status1 fdsa status1---delimiter--- asdf status5---delimiter---status5 status5---delimiter---status5 asdf status6---delimiter---status6 asdffdsa';
var matches = {}, re = /(status1|status2|status3|status4|status5|status6)---delimiter---\1/g, match;
while (match = re.exec(string)) {
if (!matches.hasOwnProperty(match[1])) {
matches[match[1]] = 1;
} else {
matches[match[1]] += 1;
}
}
/*
* matches = {
* status1: 3,
* status3: 1,
* status5: 2,
* status6: 1
* }
*/