Como posso converter uma string como 'helloThere' ou 'HelloThere' para 'Hello There' em JavaScript?
javascript
regex
string
HyderA
fonte
fonte
Respostas:
colocar em maiúscula a primeira letra - como um exemplo.
Observe o espaço em
" $1"
.EDIT: adicionado um exemplo de letras maiúsculas na primeira letra. Obviamente, caso a primeira letra já esteja em maiúscula - você teria um espaço livre para remover.
fonte
text.replace
chamadas de função de preenchimento, eu estive com 2+ argumentos com espaços para leitura demasiadoNon-GoogleChrome
?Como alternativa, usando lodash :
Exemplo:
O Lodash é uma boa biblioteca para dar atalhos para muitas tarefas diárias do js. Existem muitas outras funções semelhantes de manipulação de strings, como
camelCase
,kebabCase
etc.fonte
hello world
, a saída deve serHello There
: Nesse caso, o loadash não será útil.hello world
paraHello World
lodash.com/docs/4.17.15#upperFirsthello there
parahello world
.Eu tive um problema semelhante e lidei com isso assim:
Para uma solução mais robusta:
http://jsfiddle.net/PeYYQ/
Entrada:
Resultado:
fonte
Exemplo sem efeitos colaterais.
No ES6
fonte
A melhor string que encontrei para testar as funções camel-case-title-case é esse exemplo ridiculamente absurdo, que testa muitos casos extremos. Que eu saiba, nenhuma das funções postadas anteriormente lida com isso corretamente :
ToGetYourGEDInTimeASongAboutThe26ABCsIsOfTheEssenceButAPersonalIDCardForUser456InRoom26AContainingABC26TimesIsNotAsEasyAs123ForC3POOrR2D2Or2R2D
Isso deve ser convertido para:
Para obter seu GED in time, uma música sobre os 26 ABCs é essencial, mas um cartão de identificação pessoal para o usuário 456 na sala 26A, que contém ABC 26 vezes não é tão fácil quanto 123 para C3PO ou R2D2 ou 2R2D
Se você deseja apenas uma função simples que lide com casos como o descrito acima (e mais casos do que muitas das respostas anteriores), aqui está o que escrevi. Esse código não é particularmente elegante ou rápido, mas é simples, compreensível e funciona.
Um exemplo executável on - line está no jsfiddle , ou você pode visualizar a saída do snippet abaixo no seu console:
fonte
Com base em um dos exemplos acima, vim com isso:
Funciona para mim porque é usado
.trim()
para lidar com o caso em que a primeira letra é maiúscula e você acaba com um espaço extra à esquerda.Referência: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim
fonte
Ok, estou alguns anos atrasado para o jogo, mas tive uma pergunta semelhante e queria criar uma solução de substituição única para cada entrada possível. Devo dar a maior parte do crédito a @ZenMaster neste tópico e a @Benjamin Udink ten Cate neste tópico. Aqui está o código:
Possui três cláusulas, todas usando lookahead para impedir que o mecanismo regex consuma muitos caracteres:
[A-Z](?=[A-Z][a-z])
procura uma letra maiúscula seguida de uma maiúscula e minúscula. Isso é para terminar acrônimos como EUA.[^A-Z](?=[A-Z])
procura por uma letra maiúscula seguida por uma letra maiúscula. Isso termina palavras como myWord e símbolos como 99Bottles.[a-zA-Z](?=[^a-zA-Z])
procura por uma letra seguida por uma não-letra. Isso termina palavras antes de símbolos como BFG9000.Esta pergunta estava no topo dos meus resultados de pesquisa, por isso espero poder poupar outras pessoas algum tempo!
fonte
Aqui está a minha versão. Ele adiciona um espaço antes de cada letra em inglês do UpperCase que vem depois de uma letra em minúscula e também coloca a primeira letra em maiúscula, se necessário:
Por exemplo:
thisIsCamelCase -> Este é o caso de camelo
this IsCamelCase -> Este é o caso de camelo
thisIsCamelCase123 -> Este é o caso de camelo123
fonte
Esta implementação leva em maiúsculas e números consecutivos em consideração.
fonte
Você pode usar uma função como esta:
Código com várias sequências de teste aqui: http://jsfiddle.net/jfriend00/FWLuV/ .
Versão alternativa que mantém os espaços principais aqui: http://jsfiddle.net/jfriend00/Uy2ac/ .
fonte
" helloWorld"
, por exemplo.tente esta biblioteca
http://sugarjs.com/api/String/titleize
fonte
Nenhuma das respostas acima funcionou perfeitamente para mim, então teve que vir com a própria bicicleta:
Casos de teste:
fonte
Isso funciona para mim, verifique isso
fonte
string.replace(/([A-Z]+)/g, " $1").replace(/([A-Z][a-z])/g, "$1");
Eu acho que isso pode ser feito apenas com o reg exp
/([a-z]|[A-Z]+)([A-Z])/g
e substituição"$1 $2"
.ILoveTheUSADope -> Eu amo o narcótico dos EUA
fonte
QWERTY
ele retornaQWERT Y
.Se você lida com o Capital Camel Case, esse trecho pode ajudá-lo, mas também contém algumas especificações, para que você possa ter certeza de que ele corresponde ao seu caso.
E especificações:
fonte
Não tentei a resposta de todos, mas as poucas soluções com as quais eu trabalhei não atendiam a todos os meus requisitos.
Consegui inventar algo que fez ...
fonte
Abaixo está o link que demonstra a sequência de caracteres de camelo para sentença usando regex.
Entrada
myCamelCaseSTRINGToSPLITDemo
Resultado
my Camel Case STRING To SPLIT Demo
Este é o regex para conversão de maiúsculas e minúsculas em texto de frase
com
$1 $2
como subscrição.Clique para ver a conversão em regex
fonte
Entrada javaScript
Script Java de Saída
fonte
Mais uma solução baseada em RegEx.
Explicação
O RegEx acima consiste em duas partes semelhantes separadas pelo operador OR . A primeira metade:
([A-Z])
- corresponde a letras maiúsculas ...(?=[A-Z][a-z])
- seguido por uma sequência de letras maiúsculas e minúsculas.Quando aplicado à sequência FOo , corresponde efetivamente à sua letra F.
Ou o segundo cenário:
([a-z])
- corresponde a letras minúsculas ...(?=[A-Z])
- seguido por uma letra maiúscula.Quando aplicado à sequência barFoo , corresponde efetivamente à sua letra r .
Quando todos os candidatos a substituição foram encontrados, a última coisa a fazer é substituí-los pela mesma letra, mas com um caractere de espaço adicional. Para isso, podemos usar
'$& '
como um substituto, e ele será resolvido para uma substring correspondente, seguida por um caractere de espaço.Exemplo
fonte
Adicionando mais uma solução ES6 que eu mais gostei depois de não estar feliz com algumas reflexões acima.
https://codepen.io/902Labs/pen/mxdxRv?editors=0010#0
fonte