2012-01-21 14 views
57

Me imagino que esta es una situación de varias partes con expresiones regulares, pero ¿cómo dividirías una cadena de camello en mayúsculas y las convertirías en letras minúsculas y luego un guion entre cada cadena nueva?Javascript/jQuery: dividir cadena de camello y agregar guión en lugar de espacio

Por ejemplo:

thisString

se convertiría en:

este cuerdas

+0

En su ejemplo, no guardas las letras mayúsculas, ¿quisiste decir 'this-String'? –

+0

Creo @ user1048007 quiere conservar la letra mayúscula, pero luego minúscula. –

+0

Wouter es correcto. Debería terminar en minúsculas. – user1048007

Respuesta

120

Pruebe algo como:

var myStr = 'thisString'; 

myStr = myStr.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); 
+2

Creo que necesitabas .toLowerCase, pero de cualquier manera estoy recibiendo -tristring – user1048007

+0

@ user1048007 gracias. Lo actualicé –

+0

¡Perfecto! ¡Gracias! – user1048007

1
String.prototype.camelCaseToDashed = function(){ 
    return this.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); 
} 
// Usage 
"SomeVariable".camelCaseToDashed(); 
19

Tarde para responder, pero esta solución funcionará para los casos en que una sola letra está enchapada en camello.

'thisIsATest'.replace(/([a-zA-Z])(?=[A-Z])/g, '$1-').toLowerCase(); // this-is-a-test 
+0

funcionó bien! –

1

no sé por qué todas estas soluciones son tan complejas pero se limitó a observar que esto es suficiente:

function camelCaseToDash(input){ 
    // replace Capital letter with the letter + a dash: '-', then lowercase everything. 
    return input.replace(/([A-Z])/g, '-$1').toLowerCase(); 
}  

//or, using a callback function, directly lowercasing. 
function camelCaseToDashCallback(input){ 
    //replace capital letter with lowercase variant + a dash '-'. 
    return input.replace(/([A-Z])/g, (x)=> "-"+ x.toLowerCase()); 
}  

generalmente la opción 1 es más rápido sin embargo: https://jsfiddle.net/4557z/17/

Cuestiones relacionadas