Você pode fornecer mais alguns detalhes? Qual é a forma geral das strings que você deseja separar? Se for apenas aquela string, por que não colocar o espaço manualmente?
Pointy,
2
Por favor, seja mais preciso, acho que ninguém consegue entender o que você está perguntando
Clement Herreman,
1
defina o padrão que deve corresponder, por exemplo, "um espaço quando encontrar 'Meu' na string" ou "adicione um espaço antes de cada caractere maiúsculo, a menos que seja o primeiro caractere", ou ....
JohnSmith
"entre MySites". Como você pode colocar um espaço entre 1 coisa? Presumo que você queira "Meus Sites" como saída.
Rocket Hazmat
#meagar - bom comentário (sarcasmo). você nunca foi ensinado que se não tiver nada de bom para dizer, não diga nada?
carinlynchin de
Respostas:
163
Você pode simplesmente adicionar um espaço antes de cada caractere maiúsculo e cortar os espaços à esquerda e à direita
Isso também funciona para "1AndAbove". A outra solução não. Obrigado!!
desaivv
1
Ele "falha" para siglas, como poderíamos evitar que ele atue quando 2 ou mais maiúsculas consecutivas?
Toni Michel Caubet
3
@ToniMichelCaubet fácil, modificar o regex assim: /([A-Z]+)/g. O + fará com que você combine o maior número possível de letras maiúsculas consecutivas.
iFreilicht
Por que os parênteses que você usa para envolver '[AZ]' são necessários neste código?
Kristina Bressler
@Kristina O parêntese diz 'Eu sou uma variável'. Sem o parêntese, ele retorna a resposta '$ 1y $ 1ites' para '
MySites
127
Isso encontrará cada ocorrência de um caractere minúsculo seguido por um caractere maiúsculo e inserirá um espaço entre eles:
s = s.replace(/([a-z])([A-Z])/g,'$1 $2');
Para casos especiais quando ocorrem 2 letras maiúsculas consecutivas (Ex: ThisIsATest), adicione o código adicional abaixo:
Apenas um aviso, isso falha para letras únicas "ThisIsATest" resultará em "This Is ATest".
Ceres
3
@Ceres: Bom ponto. Esse caso pode ser tratado inserindo um espaço antes de qualquer maiúscula que não seja o primeiro caractere, mas você ainda tem casos que não podem ser tratados sem o reconhecimento de palavras, como "RunThisSQLQuery".
Guffa
1
para "ThisIsATest" - (sem contar o 'RunThisSQLQuery'), você poderia fazer isso: str.replace (/ ([AZ]) / g, '$ 1'). trim ()
carinlynchin
Brilhante! Obrigado!
Ami Schreiber
21
Posso sugerir uma pequena edição na resposta atualmente aceita:
Isso funciona perfeitamente para o que eu estava precisando. Adicionava perfeitamente um espaço entre as letras maiúsculas, mas mantinha as siglas juntas.
mighty_mite
6
Isso deve inserir um espaço entre cada letra maiúscula que não foi precedida por uma letra maiúscula.
var myString ="MySites"var newString ="";var wasUpper =false;for(var i =0; i < myString.length; i++){if(!wasUpper && myString[i]== myString.toUpperCase()[i]){
newString = newString +" ";
wasUpper =true;}else{
wasUpper =false;}
newString = newString + myString[i];}
newStringterá o valor que você deseja. Além disso, se quiser encurtar seu código usando regex, você pode usar o seguinte código de Javascript camelCase para o formato regular
"thisStringIsGood"// insert a space before all caps.replace(/([A-Z])/g,' $1')// uppercase the first character.replace(/^./,function(str){return str.toUpperCase();})
Respostas:
Você pode simplesmente adicionar um espaço antes de cada caractere maiúsculo e cortar os espaços à esquerda e à direita
fonte
/([A-Z]+)/g
. O + fará com que você combine o maior número possível de letras maiúsculas consecutivas.Isso encontrará cada ocorrência de um caractere minúsculo seguido por um caractere maiúsculo e inserirá um espaço entre eles:
Para casos especiais quando ocorrem 2 letras maiúsculas consecutivas (Ex: ThisIsATest), adicione o código adicional abaixo:
fonte
"RunThisSQLQuery"
.Posso sugerir uma pequena edição na resposta atualmente aceita:
Isso significa que:
O que pode ser um pouco mais útil se você estiver lidando com nomes de coluna db (e estiver usando acrônimos para algumas coisas)
fonte
Isso deve inserir um espaço entre cada letra maiúscula que não foi precedida por uma letra maiúscula.
newString
terá o valor que você deseja. Além disso, se quiser encurtar seu código usando regex, você pode usar o seguinte código de Javascript camelCase para o formato regularfonte
regex para encontrar minúsculas - limite de maiúsculas e inserir um espaço
http://jsfiddle.net/uXy64/
fonte
Aqui está o que acabei usando para converter uma string em uma caixa de título, com base em algumas das respostas aqui:
Aqui está um JSFiddle onde você pode testar sua string para ver se ela atende às suas necessidades: https://jsfiddle.net/thomastasa/5236dv8t/85/
Exemplos:
fonte
Você pode usar
String#split()
e um look-ahead para o alfabeto em maiúsculas ([A-Z]
) eArray#join()
a matriz com um espaço:Ou, como uma função String Object:
fonte
Em uma única regex substituir (sem cortes ou junções) que permite qualquer caractere, não apenas letras
[a-z]
ou[A-Z]
.Você pode verificar mais sobre o look behind
(?<!^)
aqui .fonte