He estado tratando de conseguir una orden de expresiones regulares JavaScript para convertir algo así como "thisString"
en "This String"
pero lo más cerca que he recibido está reemplazando una carta, lo que resulta en algo así como "Thi String"
o "This tring"
. ¿Algunas ideas?
Para aclarar que puedo manejar la simplicidad de la capitalización de una carta, simplemente no lo soy fuerte con expresiones regulares, y la división "somethingLikeThis"
en "something Like This"
es donde estoy teniendo problemas.
javascript
regex
Un mago lo hizo
fuente
fuente
Respuestas:
muestra
Mostrar fragmento de código
fuente
str.replace(/((?<!^)[A-Z](?![A-Z]))(?=\S)/g, ' $1').replace(/^./, s => s.toUpperCase() );
Se convertiráuserID
aUser ID
, e incluso se convertiráuserIDField
aUser ID Field
Tenía un interés inactivo en esto, particularmente en el manejo de secuencias de mayúsculas, como en xmlHTTPRequest. Las funciones enumeradas producirían "Solicitud HTTP Xml" o "Solicitud HTTP Xml", la mía produce "Solicitud HTTP Xml".
También hay una versión de String.prototype en una esencia .
fuente
str.replace(/((?<!^)[A-Z](?![A-Z]))(?=\S)/g, ' $1').replace(/^./, s => s.toUpperCase() )
Esto se puede hacer de manera concisa con regex lookahead ( demostración en vivo ):
(Pensé que la
g
bandera (global) era necesaria, pero curiosamente, no lo es en este caso particular).Usar lookahead con
split
asegura que la letra mayúscula coincidente no se consuma y evita tratar con un espacio inicial si UpperCamelCase es algo con lo que debe lidiar. Para poner en mayúscula la primera letra de cada uno, puede usar:El
map
método de matriz es una característica de ES5, pero aún puede usarlo en navegadores antiguos con algún código de MDC . Alternativamente, puede iterar sobre los elementos de la matriz utilizando unfor
bucle.fuente
Creo que esto debería ser capaz de manejar caracteres en mayúsculas consecutivos, así como camelCase simple.
Por ejemplo: someVariable => someVariable, pero ABCCode! = Código ABC.
La expresión regular a continuación funciona en su ejemplo, pero también en el ejemplo común de representar abreviaturas en camcelCase.
También puede ajustar como se indica arriba para capitalizar el primer carácter.
fuente
spacecamel ('algo como esto')
// valor devuelto: algo como esto
fuente
Lodash maneja esto muy bien con
_.startCase()
fuente
Una solución que también maneja números:
Probado aquí [JSFiddle, no library. No probé IE]; Debería ser bastante estable.
fuente
Si no le interesan los navegadores más antiguos (o no le importa usar una función de reducción de reserva para ellos), esto puede dividir incluso cadenas como 'xmlHTTPRequest' (pero ciertamente no puede hacerlo 'XMLHTTPRequest').
fuente
Mi version
fuente
Prueba esta solución aquí:
fuente
No es una expresión regular, pero es útil para conocer técnicas simples y antiguas como esta:
fuente