如何按字符的差异分割字符串作为分隔符

How to split a string by a difference in character as delimiter?

本文关键字:字符串 分隔符 分割 何按 字符      更新时间:2023-09-26

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

"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,但我不确定regexp应该是什么。是否有可能定义一个regexp,意思是"一个字符和一个不同的字符"?

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

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

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

这里.将匹配任何字符,'1*将匹配与先前匹配的字符相同的任何后续字符。使用全局匹配,您将获得所有匹配序列。