Разделить строку Javascript на символы верхнего регистра

107

Как разделить строку на массив в Javascript по символу UpperCase?

Итак, я хочу разделить:

'ThisIsTheStringToSplit'

в

('This', 'Is', 'The', 'String', 'To', 'Split')
Николас Мюррей
источник
Это может оказаться полезным для некоторых людей, которые ищут решение этой проблемы: stackoverflow.com/a/25732260/1454888
Августо Баррето,

Ответы:

228

Я бы сделал это .match()так:

'ThisIsTheStringToSplit'.match(/[A-Z][a-z]+/g);

он создаст такой массив:

['This', 'Is', 'The', 'String', 'To', 'Split']

edit: поскольку string.split()метод также поддерживает регулярное выражение, это может быть достигнуто следующим образом

'ThisIsTheStringToSplit'.split(/(?=[A-Z])/); // positive lookahead to keep the capital letters

это также решит проблему из комментария:

"thisIsATrickyOne".split(/(?=[A-Z])/);
Teneff
источник
47
При этом не будут обнаружены одиночные символы верхнего регистра. Предлагаю следующее: "thisIsATrickyOne".match(/([A-Z]?[^A-Z]*)/g).slice(0,-1)
andrewmu
18
.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")

Это также должно обрабатывать числа ... соединение в конце приводит к объединению всех элементов массива в предложение, если это то, что вы ищете

'ThisIsTheStringToSplit'.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")

Вывод

"This Is The String To Split"
Максимум
источник
Это потрясающе. Но любой, кто использует это, должен быть осторожен в следующем случае: 'ThisIs8TheSt3ringToSplit'.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")будет выводить This Is 8 The St 3 To Split, опуская маленькую строку регистра ( ring) после 3.
Diablo
9

Вот, пожалуйста :)

var arr = UpperCaseArray("ThisIsTheStringToSplit");

function UpperCaseArray(input) {
    var result = input.replace(/([A-Z]+)/g, ",$1").replace(/^,/, "");
    return result.split(",");
}
Мануэль ван Рейн
источник
1

Это мое решение, которое является быстрым, кроссплатформенным, не зависит от кодировки и может быть легко написано на любом языке без зависимостей.

var s1 = "ThisЭтотΨόυτÜimunəՕրինակPříkladדוגמאΠαράδειγμαÉlda";
s2 = s1.toLowerCase();
result="";
for(i=0; i<s1.length; i++)
{
 if(s1[i]!==s2[i]) result = result +' ' +s1[i];
 else result = result + s2[i];
}
result.split(' ');
Айай Мэтти
источник