JavaScript Разделить строку на несколько вхождений букв

Я пытаюсь разбить строку одним или несколькими вхождениями букв.

Например:

aaabbcapppp, даст массив, ["aaa", "bb", "c", "a", "pppp"]

Самая неэффективная идея, которую я имел, заключалась в том, чтобы просто использовать newArray = str.split(""); и перестроить массив для моих нужд. Я предполагаю, что существует гораздо более эффективное решение.

Ответ 1

Что-то вроде этого будет работать:

"aaabbcapppp".match(/(.)\1*/g) // ["aaa", "bb", "c", "a", "pppp"]

(.) соответствует любому одиночному символу, записанному в группе 1, за которым следует тот же символ, который повторяется ноль или более раз (\1 - это обратная ссылка, которая точно соответствует тому, что соответствовало в группе 1).

Чтобы соответствовать только латинским буквам, используйте [a-z], например:

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

Здесь - и !! не включены в массив результатов.

Ответ 2

Решение regex, вероятно, подходит, но если по какой-то причине вы хотите сделать это вручную, что-то вроде этого будет работать

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

FIDDLE