Рядок Javascript Split на символах UpperCase


106

Як розділити рядок на масив у Javascript за символом UpperCase?

Тому я хочу розділити:

'ThisIsTheStringToSplit'

в

('This', 'Is', 'The', 'String', 'To', 'Split')

Це може стати корисним для деяких людей, які шукають рішення цієї проблеми: stackoverflow.com/a/25732260/1454888
Augusto Barreto

Відповіді:


223

Я б це зробив .match()так:

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

це зробить масив таким чином:

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

редагувати: оскільки string.split()метод також підтримує регулярний вираз, його можна досягти так

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

це також вирішить проблему з коментаря:

"thisIsATrickyOne".split(/(?=[A-Z])/);

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.
Діабло

9

Ось ви :)

var arr = UpperCaseArray("ThisIsTheStringToSplit");

function UpperCaseArray(input) {
    var result = input.replace(/([A-Z]+)/g, ",$1").replace(/^,/, "");
    return result.split(",");
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.