如何将字符串中的字符串拆分为分隔符?

pim*_*vdb 3 javascript arrays string split

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

"AAABBCCCCDEEE" -> ["AAA", "BB", "CCCC", "D", "EEE"]
Run Code Online (Sandbox Code Playgroud)

我一直在努力构建一个简洁的解决方案,但我最终得到了这个相当冗长的代码: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
    }
}
Run Code Online (Sandbox Code Playgroud)

这很幼稚,我不喜欢它:

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

我在考虑使用正则表达式,但我不确定regexp应该是什么.是否有可能定义一个正则表达"一个字符和一个不同的字符跟随"?

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

Gum*_*mbo 6

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

"AAABBCCCCDEEE".match(/(.)\1*/g)
Run Code Online (Sandbox Code Playgroud)

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