Com regex (presumo) ou algum outro método, como posso converter coisas como:
marker-image
ou my-example-setting
para markerImage
ou myExampleSetting
.
Eu estava pensando em apenas dividir -
e converter o índice desse hypen +1 em maiúsculas. Mas parece bastante sujo e esperava alguma ajuda com o regex que pudesse tornar o código mais limpo.
Sem jQuery ...
javascript
regex
camelcasing
Oscar Godson
fonte
fonte
Respostas:
Tente o seguinte:
A expressão regular corresponderá ao
-i
inmarker-image
e capturará apenas oi
. Isso é maiúsculo na função de retorno de chamada e substituído.fonte
myString.replace(/([a-z][A-Z])/g, function (g) { return g[0] + '-' + g[1].toLowerCase() });
myString.replace(/-([a-z])/i, function (i) { return i[1].toUpperCase() });
i
flag. Sem ele, seu padrão perde "Peças em maiúsculas" (não será alterado para "Peças em maiúsculas"). Além disso, eu pessoalmente prefiro a legibilidade aprimorada de vários parâmetros, mas isso é obviamente uma questão de estilo. Ao todo, eu iria com.replace( /-([a-z])/gi, function ( $0, $1 ) { return $1.toUpperCase(); } );
.var camelCased = myString.replace(/(-+|\s+)\w/g, function (g) { return g[1].toUpperCase(); });
var camelCased = myString.replace(/(-+|\s+)\w/g, function (g) { return g[g.length - 1].toUpperCase(); });
:?Este é um dos grandes utilitários que a Lodash oferece se você for esclarecido e incluí-lo em seu projeto.
fonte
Você pode obter o hypen e o próximo caractere e substituí-lo pela versão em maiúscula do caractere:
fonte
Aqui está a minha versão da função camelCase:
Ele lida com todos os seguintes casos de borda:
Aqui está um link para testes ao vivo: http://jsfiddle.net/avKzf/2/
Aqui estão os resultados dos testes:
Observe que as seqüências que começam com delimitadores resultarão em uma letra maiúscula no início. Se não é o que você esperaria, você sempre pode usar lcfirst. Aqui está o meu lcfirst se você precisar:
fonte
Isso não grita por um
RegExp
para mim. Pessoalmente, tento evitar expressões regulares quando métodos simples de string e matriz forem suficientes:fonte
Aqui está outra opção que combina algumas respostas aqui e o torna um método em uma string:
Usado assim:
fonte
fonte
Você pode usar camelcase no NPM.
npm install --save camelcase
fonte
Outra tomada.
fonte
também é possível usar indexOf com recursão para essa tarefa.
Comparação ::: mede o tempo de execução de dois scripts diferentes:
código:
fonte
Apenas uma versão com flag, for loop e sem Regex:
fonte
Aqui está a minha implementação (apenas para sujar as mãos)
fonte
Use isso se você permitir números em sua string.
Obviamente, as partes que começam com um número não serão capitalizadas, mas isso pode ser útil em algumas situações.
fonte