javascript - JavaScript 字符串中多个子字符串的计数

标签 javascript regex

我从服务器接收到一个以状态---分隔符---状态形式的标记化字符串,其中我最多可以有 1000 个状态。状态只有 6 种可能的值。我正在尝试找到一种方法来同时搜索所有 6 个,这样我就可以对每个进行计数。我想出了几种不太理想的方法来解决这个问题,但我能想到的最好的方法仍然有效地在字符串上进行两次完整的传递,并涉及几个子步骤。我查看了 regX .match 和捕获组,但似乎找不到任何方法可以使其比一次一种状态更好地工作。我意识到性能差异不会很明显,但现在我只想知道,因为理论上这应该是可行的(尽管可能不适用于 JavaScript regX)。

示例 状态集:[红色、蓝色、绿色、橙色、紫色、粉色] 分隔符(我可以选择这个):| 字符串:红|紫|绿|红|蓝|橙|紫|蓝

结果:[红色:2,蓝色:2,绿色:1,橙色:​​1,紫色,2,粉色0]

最佳答案

你的问题有点不清楚。这就是我假设您正在尝试执行的操作(即 ---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
 * }
 */

关于javascript - JavaScript 字符串中多个子字符串的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22721678/

相关文章:

c# - C# 中需要 REGEX 帮助

javascript - 在javascript中用数组解析url

c - 为 C 数字文字编写正则表达式

javascript - 如果表与字符串匹配则更新表

javascript - 如何在鼠标悬停在从数组加载元素的 div 上显示名称

javascript - 在悬停时添加和删除 css 类

javascript - 如何通过 AJAX 验证阻止表单提交

r - 在变量中搜索字符串并返回匹配的字符串

javascript - Bootstrap 模式不会在第一次点击时切换

python - 正则表达式匹配太多括号