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