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

时间:2011-10-15 13:30:15

标签: javascript arrays string split

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

"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
    }
}

天真,我不喜欢它:

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

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

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

1 个答案:

答案 0 :(得分:6)

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

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

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