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应该是什么.是否有可能定义一个正则表达"一个字符和一个不同的字符跟随"?
或者更一般地说,是否有更优雅的解决方案来实现这种分裂方法?
是的,您可以使用正则表达式:
"AAABBCCCCDEEE".match(/(.)\1*/g)
Run Code Online (Sandbox Code Playgroud)
这里.将匹配任何字符,\1*并匹配以前匹配的任何后续字符.通过全局匹配,您将获得所有匹配的序列.