【问题标题】:How to split a string by a difference in character as delimiter?如何通过字符差异分割字符串作为分隔符?
【发布时间】:2011-10-15 13:30:15
【问题描述】:

我想要实现的是像这样拆分字符串,即分隔符是该索引之前的字符与该索引之后的字符不同的索引:

"AAABBCCCCDEEE" -> ["AAA", "BB", "CCCC", "D", "EEE"]

我一直在尝试编写一个简洁的解决方案,但我最终得到了这个相当冗长的代码:http://jsfiddle.net/b39aM/1/

var arr = [],               // output
    text = "AAABBCCCCDEEE", // input
    current;

for(var i = 0; i < text.length; i++) {
    var char = text[i];

    if(char !== current) { // new letter
        arr.push(char);    // create new array element
        current = char;    // update current
    } else {                         // current letter continued
        arr[arr.length - 1] += char; // append letter to last element
    }
}

太天真了,我不喜欢:

  • 我手动迭代每个字符,并逐个字符地追加到数组中
  • 对于我想要实现的简单事情来说有点太长了

我正在考虑使用正则表达式,但我不确定正则表达式应该是什么。是否可以定义一个表示“一个字符和一个不同的字符跟随”的正则表达式?

或者更一般地说,有没有更优雅的解决方案来实现这种拆分方法?

【问题讨论】:

    标签: javascript arrays string split


    【解决方案1】:

    是的,您可以使用正则表达式:

    "AAABBCCCCDEEE".match(/(.)\1*/g)
    

    这里. 将匹配任何字符,\1* 将匹配任何与之前匹配的字符相同的后续字符。通过全局匹配,您将获得所有匹配的序列。

    【讨论】:

    • @NullUserExceptionఠ_ఠ 不,我只是在最初的帖子之后添加了解释。
    猜你喜欢
    • 2012-07-31
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2013-11-24
    • 2021-06-12
    相关资源
    最近更新 更多