【问题标题】:Count of multiple substrings in JavaScript stringJavaScript 字符串中多个子字符串的计数
【发布时间】:2014-03-28 19:34:40
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么不使用 var arr= your_string.split(delimiter) 然后遍历数组并计算它们?
  • 这是我的 2 通解决方案。由于拆分是一次完整的传递,因此必须搜索数组以将每个状态放入正确的计数中。
  • 你能告诉你的状态选项和分隔符吗?
  • 加了个例子,分隔符是我选择的单个字符。
  • 其他答案还不够吗?似乎工作

标签: javascript regex


【解决方案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
 * }
 */

【讨论】:

    【解决方案2】:

    使用this answer 中的strtok 向下迭代字符串一次,依次拉出每个“令牌”(状态值),并在执行过程中递增计数。

    【讨论】:

    • 这看起来像我想要的一些修改,谢谢。
    猜你喜欢
    • 2018-05-25
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2015-01-30
    相关资源
    最近更新 更多