Con regex (supongo) o algún otro método, ¿cómo puedo convertir cosas como:
marker-image
o my-example-setting
a markerImage
o myExampleSetting
.
Estaba pensando en dividir para -
luego convertir el índice de ese hypen +1 a mayúsculas. Pero parece bastante sucio y esperaba ayuda con expresiones regulares que podría hacer que el código fuera más limpio.
No jQuery ...
javascript
regex
camelcasing
Oscar Godson
fuente
fuente
Respuestas:
Prueba esto:
La expresión regular coincidirá con el
-i
demarker-image
y la captura sólo eli
. Esto se pone en mayúscula en la función de devolución de llamada y se reemplaza.fuente
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
bandera. Sin él, su patrón pierde "Partes capitalizadas" (no se cambiará a "Partes capitalizadas"). Además, personalmente prefiero la legibilidad mejorada de múltiples parámetros, pero eso es obviamente una cuestión de estilo. Con todo, iría con.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(); });
?Esta es una de las grandes utilidades que ofrece Lodash si está iluminado y lo incluye en su proyecto.
fuente
Puedes obtener el himno y el siguiente personaje y reemplazarlo con la versión en mayúsculas del personaje:
fuente
Aquí está mi versión de la función camelCase:
Maneja todos los siguientes casos límite:
Aquí hay un enlace a las pruebas en vivo: http://jsfiddle.net/avKzf/2/
Aquí están los resultados de las pruebas:
Observe que las cadenas que comienzan con delimitadores darán como resultado una letra mayúscula al principio. Si eso no es lo que esperarías, siempre puedes usar lcfirst. Aquí está mi primer mensaje si lo necesita:
fuente
Esto no es un grito para
RegExp
mí. Personalmente, trato de evitar expresiones regulares cuando una cadena simple y métodos de matriz son suficientes:fuente
Aquí hay otra opción que combina un par de respuestas aquí y hace que sea un método en una cadena:
Usado así:
fuente
fuente
Puedes usar camelcase de NPM.
npm install --save camelcase
fuente
Otra toma
fuente
También es posible usar indexOf con recursividad para esa tarea.
comparación ::: medir el tiempo de ejecución para dos scripts diferentes:
código:
fuente
Solo una versión con bandera, para loop y sin Regex:
fuente
Aquí está mi implementación (solo para ensuciarse las manos)
fuente
Use esto si permite números en su cadena.
Obviamente, las partes que comienzan con un número no se capitalizarán, pero esto puede ser útil en algunas situaciones.
fuente