JavaScript通过多次出现的字母拆分字符串

JavaScript通过多次出现的字母拆分字符串,javascript,regex,string,split,Javascript,Regex,String,Split,我试图用一个或多个字母来拆分字符串 例如: aaabbcappp将生成数组,[“aaa”、“bb”、“c”、“a”、“pppp”] 我最低效的想法就是利用,newArray=str.split(“”)并根据我的需要重建阵列。我认为有一个更有效的解决方案。类似的解决方案可以: "aaabbcapppp".match(/(.)\1*/g) // ["aaa", "bb", "c", "a", "pppp"] ()匹配组1中捕获的任何单个字符,然后该字符重复零次或多次(\1是一个反向引用,它与组1中

我试图用一个或多个字母来拆分字符串

例如:

aaabbcappp
将生成数组,
[“aaa”、“bb”、“c”、“a”、“pppp”]


我最低效的想法就是利用,
newArray=str.split(“”)
并根据我的需要重建阵列。我认为有一个更有效的解决方案。

类似的解决方案可以:

"aaabbcapppp".match(/(.)\1*/g) // ["aaa", "bb", "c", "a", "pppp"]
()
匹配组1中捕获的任何单个字符,然后该字符重复零次或多次(
\1
是一个反向引用,它与组1中匹配的字符完全匹配)

仅匹配拉丁字母,考虑使用<代码> [AZ] < /代码>,例如:

"aaa-bbca!!pppp".match(/([a-z])\1*/g) // ["aaa", "bb", "c", "a", "pppp"]

这里是
-
不包括在结果数组中。

正则表达式解决方案可能是可行的,但如果出于某种原因您希望手动执行,类似的方法也可以

function charSplit(str) {
    var arr = [], l, j = -1;
    for (var i=0; i<str.length; i++) {
        var c = str.charAt(i);
        l==c ? arr[j] += c : arr[++j] = c;
        l=c;
    }
    return arr;
}
函数charSplit(str){
var arr=[],l,j=-1;

对于(var i=0;我看一下+1似乎可以通过查找运行中第一个和最后一个字符的索引,然后执行子字符串而不是串联来改进。不过我很喜欢它。@p.s.w.g-谢谢,+1谢谢你。是的,它可能可以改进,但这很简单,我甚至为了好玩而缩小了它->