如何使用字符差异作为分隔符来拆分字符串?

3

我想要做的是将这样的字符串分割开来,即使用那些在该索引之前和之后的字符不同的索引作为分隔符:

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

这个方法很朴素而且我不喜欢它:

  • 我需要手动遍历每个字符,并逐个将字符添加到数组中
  • 对于我想要实现的简单功能来说有点太长了

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

或者更一般地说,有没有更优雅的方法来实现此拆分方法?

1个回答

6

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

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

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


@NullUserExceptionఠ_ఠ 不是的。我只是在最初的帖子后添加了解释。 - Gumbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接