我想要实现的是分割这样的字符串,即分隔符是索引之前的字符与该索引之后的字符不同的索引:
"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应该是什么。是否可以定义一个正则表达“一个字符和一个不同的字符”?
或者更一般地说,是否有更优雅的解决方案来实现这种分裂方法?
答案 0 :(得分:6)
是的,您可以使用正则表达式:
"AAABBCCCCDEEE".match(/(.)\1*/g)
此处.
将匹配任何字符,\1*
将匹配与之前匹配的字符相同的任何后续字符。通过全局匹配,您将获得所有匹配的序列。