Javascript Split string em caracteres maiúsculos

106

Como você divide uma string em uma matriz em Javascript por caractere UpperCase?

Então, eu desejo dividir:

'ThisIsTheStringToSplit'

para dentro

('This', 'Is', 'The', 'String', 'To', 'Split')
Nicholas Murray
fonte
Isso pode acabar sendo útil para algumas pessoas que buscam uma solução para esse problema: stackoverflow.com/a/25732260/1454888
Augusto Barreto

Respostas:

222

Eu faria isso .match()assim:

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

ele fará uma matriz como esta:

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

editar: uma vez que o string.split()método também suporta regex, ele pode ser alcançado assim

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

isso também resolverá o problema do comentário:

"thisIsATrickyOne".split(/(?=[A-Z])/);
Teneff
fonte
47
Isso não encontrará caracteres maiúsculos únicos. Eu sugiro o seguinte: "thisIsATrickyOne".match(/([A-Z]?[^A-Z]*)/g).slice(0,-1)
andrewmu
18
.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")

Isso deve lidar com os números também .. a junção no final resulta na concatenação de todos os itens da matriz em uma frase se for isso que você está procurando

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

Resultado

"This Is The String To Split"
Max
fonte
Isto é perfeito. Mas qualquer um que usar isso deve ter cuidado no seguinte caso: 'ThisIs8TheSt3ringToSplit'.match(/[A-Z][a-z]+|[0-9]+/g).join(" ")irá imprimir This Is 8 The St 3 To Split, omitindo a string de maiúsculas e minúsculas ( ring) depois 3.
Diablo
9

Olha Você aqui :)

var arr = UpperCaseArray("ThisIsTheStringToSplit");

function UpperCaseArray(input) {
    var result = input.replace(/([A-Z]+)/g, ",$1").replace(/^,/, "");
    return result.split(",");
}
Manuel van Rijn
fonte