¿Cómo puedo convertir una cadena en una caja de camello usando JavaScript Regex?
EquipmentClass name
o
Equipment className
o equipment class name
oEquipment Class Name
todos deben convertirse en: equipmentClassName
.
javascript
regex
camelcasing
Scott Klarenbach
fuente
fuente
Respuestas:
Mirando su código, puede lograrlo con solo dos
replace
llamadas:Editar: O con una sola
replace
llamada, capturando los espacios en blanco también enRegExp
.fuente
camelize("Let's Do It!") === "let'SDoIt!"
cara triste . Lo intentaré, pero temo que solo agregaré otro reemplazo.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. Ej. utilizando la solución de @ tabrindle anterior:const toCamelCase = (str) => str.toLowerCase().replace(/(?:^\w|[A-Z]|\b\w)/g, (ltr, idx) => idx === 0 ? ltr.toLowerCase() : ltr.toUpperCase()).replace(/\s+/g, '');
Si alguien está usando lodash , hay una
_.camelCase()
función.fuente
Acabo de hacer esto:
Estaba tratando de evitar encadenar varias declaraciones de reemplazo. Algo donde tendría $ 1, $ 2, $ 3 en mi función. Pero ese tipo de agrupación es difícil de entender, y su mención sobre problemas entre navegadores es algo en lo que nunca pensé.
fuente
this.valueOf()
lugar de pasarstr
. Alternativamente (como en mi caso)this.toLowerCase()
ya que mis cadenas de entrada estaban en TODAS LAS MAYÚSCULAS que no tenían las partes sin joroba en minúsculas correctamente. El uso solothis
devuelve el objeto de cadena en sí, que en realidad es una matriz de caracteres, de ahí el TypeError mencionado anteriormente.Puedes usar esta solución:
fuente
toCamelCase
función simplemente lo hace.ES5
ES6
Nota:
Para aquellos idiomas con acentos. Incluya
À-ÖØ-öø-ÿ
con la expresión regular de la siguiente manera.replace(/[^a-zA-ZÀ-ÖØ-öø-ÿ0-9]+(.)/g
fuente
https://stackoverflow.com/posts/52551910/revisions
ES6, no lo he probado. Comprobaré y actualizaré.En el caso específico de Scott, iría con algo como:
La expresión regular coincidirá con el primer carácter si comienza con una letra mayúscula y cualquier carácter alfabético que siga a un espacio, es decir, 2 o 3 veces en las cadenas especificadas.
Al condimentar la expresión regular
/^([A-Z])|[\s-_](\w)/g
, también se camelizarán los guiones y los nombres de tipo de subrayado.fuente
+
) al grupo de personajes, es decir:/^([A-Z])|[\s-_]+(\w)/g
Estaba tratando de encontrar una función de JavaScript para
camelCase
una cadena, y quería asegurarme de que se eliminarían los caracteres especiales (y tuve problemas para comprender lo que estaban haciendo algunas de las respuestas anteriores). Esto se basa en la respuesta de cc young, con comentarios adicionales y la eliminación de los caracteres $ peci & l.fuente
Ejemplo de trabajo confiable que he estado usando durante años:
Personajes que cambian las mayúsculas y minúsculas:
-
_
.
fuente
Si no se requiere regexp, puede consultar el siguiente código que hice hace mucho tiempo para Twinkle :
No he realizado ninguna prueba de rendimiento, y las versiones de regexp pueden o no ser más rápidas.
fuente
Mi enfoque ES6 :
fuente
fuente
Lodash puede hacer el truco seguro y bien:
Aunque
lodash
puede ser una biblioteca "grande" (~ 4kB), contiene muchas funciones para las que normalmente usarías un fragmento o para compilarte.fuente
Aquí hay un trazador de líneas haciendo el trabajo:
Divide la cadena en minúsculas en función de la lista de caracteres proporcionada en RegExp
[.\-_\s]
(agregue más dentro de []!) Y devuelve una matriz de palabras. Luego, reduce el conjunto de cadenas a una cadena de palabras concatenadas con primeras letras en mayúscula. Como la reducción no tiene un valor inicial, comenzará a poner en mayúscula las primeras letras que comienzan con la segunda palabra.Si desea PascalCase, simplemente agregue una cadena vacía inicial
,'')
al método de reducción.fuente
siguiendo el enfoque legible de @ Scott, un poco de ajuste
fuente
la pequeña respuesta de Scott modificada:
ahora reemplaza '-' y '_' también.
fuente
Las 14 permutaciones a continuación producen el mismo resultado de "equipmentClassName".
fuente
puedes usar esta solución:
fuente
Debido a que esta pregunta necesitaba otra respuesta ...
Probé varias de las soluciones anteriores, y todas tenían una falla u otra. Algunos no eliminaron la puntuación; algunos no manejaban casos con números; algunos no manejaban múltiples puntuaciones seguidas.
Ninguno de ellos manejó una cadena como
a1 2b
. No existe una convención explícitamente definida para este caso, pero algunas otras preguntas de stackoverflow sugirieron separar los números con un guión bajo.Dudo que esta sea la respuesta más eficaz (tres expresiones regulares pasan a través de la cadena, en lugar de una o dos), pero pasa todas las pruebas que se me ocurren. Sin embargo, para ser sincero, realmente no puedo imaginar un caso en el que esté haciendo tantas conversiones de camellos que el rendimiento sea importante.
( Agregué esto como un paquete npm . También incluye un parámetro booleano opcional para devolver Pascal Case en lugar de Camel Case).
Casos de prueba (Jest)
fuente
Ahí está mi solución:
fuente
Este método parece superar la mayoría de las respuestas aquí, sin embargo, es un poco hacky, no reemplaza, no regex, simplemente construye una nueva cadena que es camelCase.
fuente
Esto se basa en la respuesta del CMS al eliminar los caracteres no alfabéticos, incluidos los guiones bajos, que
\w
no se eliminan.fuente
Mayúscula de camello ("TestString") a minúscula de camello ("testString") sin usar expresiones regulares (seamos sinceros, la expresión regular es mala):
fuente
Terminé creando una solución un poco más agresiva:
Este, arriba, eliminará todos los caracteres no alfanuméricos y las partes minúsculas de las palabras que, de lo contrario, permanecerían en mayúsculas, p. Ej.
Size (comparative)
=>sizeComparative
GDP (official exchange rate)
=>gdpOfficialExchangeRate
hello
=>hello
fuente
fuente
Aquí está mi sugerencia:
o
Casos de prueba:
fuente
Sé que esta es una respuesta anterior, pero maneja tanto los espacios en blanco como _ (lodash)
fuente
"
en el.replace(/_/g", " ")
que los errores de compilación causas?fuente
EDITAR : ahora trabajando en IE8 sin cambios.
EDITAR : Estaba en minoría sobre qué es camelCase en realidad (carácter principal en minúsculas frente a mayúsculas). La comunidad en general cree que una minúscula líder es el caso del camello y una capital líder es el caso pascal. He creado dos funciones que usan solo patrones de expresiones regulares. :) Así que usamos un vocabulario unificado. He cambiado mi postura para que coincida con la mayoría.
Todo lo que creo que necesitas es una expresión regular única en cualquier caso:
o
En funciones: Notará que en estas funciones el reemplazo está intercambiando cualquier no az con un espacio frente a una cadena vacía. Esto es para crear límites de palabras para la capitalización. "hola-MI # mundo" -> "HelloMyWorld"
Notas:
Disfrutar
fuente
Creo que esto debería funcionar..
fuente
No use String.prototype.toCamelCase () porque los String.prototypes son de solo lectura, la mayoría de los compiladores js le darán esta advertencia.
Como yo, aquellos que saben que la cadena siempre contendrá solo un espacio pueden usar un enfoque más simple:
Tenga un buen día. :)
fuente