Como posso converter uma string em camel case usando javascript regex?
EquipmentClass name
ou
Equipment className
ou equipment class name
ouEquipment Class Name
todos devem ser: equipmentClassName
.
javascript
regex
camelcasing
Scott Klarenbach
fonte
fonte
Respostas:
Olhando para o seu código, você pode obtê-lo com apenas duas
replace
chamadas:Editar: ou com uma única
replace
chamada, capturando os espaços em branco também noRegExp
.fonte
camelize("Let's Do It!") === "let'SDoIt!"
cara triste . Vou tentar, mas temo apenas adicionar outra substituição.return this.replace(/[^a-z ]/ig, '').replace(/(?:^\w|[A-Z]|\b\w|\s+)/g,
...const toCamelCase = (str) => str.replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, '');
.toLowerCase()
método. usando a solução da @ tabrindle acima:const toCamelCase = (str) => str.toLowerCase().replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, '');
Se alguém estiver usando o lodash , há uma
_.camelCase()
função.fonte
Acabei fazendo isso:
Eu estava tentando evitar encadear várias instruções de substituição. Algo em que eu teria $ 1, $ 2, $ 3 em minha função. Mas esse tipo de agrupamento é difícil de entender e sua menção a problemas entre navegadores é algo em que nunca pensei tão bem.
fonte
this.valueOf()
vez de passarstr
. Como alternativa (como no meu caso),this.toLowerCase()
como minhas seqüências de entrada estavam em ALL CAPS, que não tinham as partes não-hump em minúsculas corretamente. O uso de apenasthis
retorna o próprio objeto string, que na verdade é uma matriz de caracteres, daí o TypeError mencionado acima.Você pode usar esta solução:
fonte
toCamelCase
função apenas faz isso.ES5
ES6
Nota:
Para aqueles idiomas com acentos. Inclua
À-ÖØ-öø-ÿ
com a regex da seguinte maneira.replace(/[^a-zA-ZÀ-ÖØ-öø-ÿ0-9]+(.)/g
fonte
https://stackoverflow.com/posts/52551910/revisions
ES6, ainda não testei. Vou verificar e atualizar.No caso específico de Scott, eu usaria algo como:
O regex corresponderá ao primeiro caractere se começar com uma letra maiúscula e qualquer caractere alfabético após um espaço, ou seja, 2 ou 3 vezes nas seqüências especificadas.
Ao apimentar o regex,
/^([A-Z])|[\s-_](\w)/g
ele também camelizará o hífen e o sublinhado dos nomes do tipo.fonte
+
) ao grupo de caracteres, ou seja:/^([A-Z])|[\s-_]+(\w)/g
Eu estava tentando encontrar uma função JavaScript em
camelCase
uma string e queria garantir que caracteres especiais fossem removidos (e tive problemas para entender o que algumas das respostas acima estavam fazendo). Isso se baseia na resposta de cc young, com comentários adicionais e a remoção de caracteres $ peci & l.fonte
Exemplo confiável e funcional que uso há anos:
Caracteres que mudam de maiúsculas e minúsculas:
-
_
.
fonte
Se o regexp não for necessário, você pode consultar o seguinte código que criei há muito tempo para o Twinkle :
Eu não fiz nenhum teste de desempenho e as versões regexp podem ou não ser mais rápidas.
fonte
Minha abordagem ES6 :
fonte
fonte
O lodash pode fazer o truque certo e bem:
Embora
lodash
possa ser uma biblioteca "grande" (~ 4kB), ela contém muitas funções para as quais você normalmente usaria um snippet ou construiu-se.fonte
Aqui está um liner fazendo o trabalho:
Ele divide a cadeia de caracteres com letras minúsculas com base na lista de caracteres fornecida no RegExp
[.\-_\s]
(adicione mais dentro de []!) E retorna uma matriz de palavras. Em seguida, reduz a matriz de seqüências de caracteres a uma sequência concatenada de palavras com as primeiras letras maiúsculas. Como a redução não tem valor inicial, começará a maiúscula as primeiras letras começando com a segunda palavra.Se você deseja PascalCase, basta adicionar uma string vazia inicial
,'')
ao método de redução.fonte
seguindo a abordagem legível de @ Scott, um pouco de ajuste fino
fonte
pouco modificado resposta de Scott:
agora substitui '-' e '_' também.
fonte
Todas as 14 permutações abaixo produzem o mesmo resultado de "equipmentClassName".
fonte
você pode usar esta solução:
fonte
Porque esta pergunta precisava de mais uma resposta ...
Eu tentei várias das soluções anteriores e todas tinham uma falha ou outra. Alguns não removeram a pontuação; alguns não lidavam com casos com números; alguns não lidaram com várias pontuações seguidas.
Nenhum deles segurou uma corda como
a1 2b
. Não há uma convenção explicitamente definida para este caso, mas algumas outras perguntas sobre o fluxo de pilha sugeriram separar os números com um sublinhado.Duvido que essa seja a resposta de melhor desempenho (três regex passam pela string, em vez de uma ou duas), mas passam em todos os testes em que consigo pensar. Para ser sincero, no entanto, eu realmente não consigo imaginar um caso em que você esteja fazendo tantas conversões de caso em camelo que o desempenho seja importante.
( Adicionei isso como um pacote npm . Ele também inclui um parâmetro booleano opcional para retornar Pascal Case em vez de Camel Case.)
Casos de teste (Jest)
fonte
Aqui está a minha solução:
fonte
Esse método parece ter um desempenho melhor do que a maioria das respostas aqui, mas é um pouco invasivo, sem substituições, sem regex, simplesmente criando uma nova sequência que é camelCase.
fonte
Isso se baseia na resposta do CMS, removendo caracteres não alfabéticos, incluindo sublinhados, que
\w
não são removidos.fonte
Caixa superior de camelo ("TestString") para caixa inferior de camelo ("testString") sem usar regex (vamos ser sinceros, regex é ruim):
fonte
Acabei criando uma solução um pouco mais agressiva:
Este, acima, removerá todos os caracteres não alfanuméricos e partes minúsculas das palavras que, de outra forma, permaneceriam em maiúsculas, por exemplo
Size (comparative)
=>sizeComparative
GDP (official exchange rate)
=>gdpOfficialExchangeRate
hello
=>hello
fonte
fonte
Aqui está a minha sugestão:
ou
Casos de teste:
fonte
Eu sei que essa é uma resposta antiga, mas isso lida com espaços em branco e _ (lodash)
fonte
"
em.replace(/_/g", " ")
que os erros de causas de compilação?fonte
EDIT : Agora trabalhando no IE8 sem alterações.
EDIT : Eu estava em minoria sobre o que camelCase realmente é (Caractere líder em minúsculas vs. maiúsculas.). A comunidade em geral acredita que uma das principais letras minúsculas é o caso de camelo e a principal capital é o caso de pascal. Eu criei duas funções que usam apenas padrões regex. :) Então, usando um vocabulário unificado, mudei de posição para corresponder à maioria.
Tudo o que acredito que você precisa é de uma única regex em ambos os casos:
ou
Nas funções: Você notará que nessas funções a substituição está trocando qualquer não az por um espaço versus uma sequência vazia. Isso é para criar limites de palavras para letras maiúsculas. "olá-MEU mundo # -"> HelloMyWorld "
Notas:
Aproveitar
fonte
Eu acho que isso deve funcionar..
fonte
Não use String.prototype.toCamelCase () porque String.prototypes são somente leitura, a maioria dos compiladores js fornecerá esse aviso.
Como eu, quem sabe que a string sempre contém apenas um espaço pode usar uma abordagem mais simples:
Tenha um bom dia. :)
fonte