2012-01-21 16 views
57

Immagino che si tratti di una situazione a più parti con regex, ma come si dividerà una stringa di camelcase alle lettere maiuscole trasformandole in lettere minuscole e quindi aggiungendo un trattino tra ogni nuova stringa?Javascript/jQuery: Dividere la stringa camelcase e aggiungere il trattino anziché lo spazio

Ad esempio:

thisString

sarebbe diventato:

questa stringa

+0

Nel tuo esempio, non stai mantenendo le lettere maiuscole, intendevi 'this-String'? –

+0

Penso che @ user1048007 voglia mantenere la lettera captial, ma poi in minuscolo. –

+0

Wouter è corretto. Dovrebbe finire in lettere minuscole. – user1048007

risposta

120

Prova qualcosa di simile:

var myStr = 'thisString'; 

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

Penso che tu avessi bisogno di .toLowerCase, ma in entrambi i casi sto ottenendo -thisstring – user1048007

+0

@ user1048007 grazie. L'ho aggiornato. –

+0

Perfetto! Grazie! – user1048007

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

In ritardo per rispondere, ma questa soluzione funzionerà per i casi in cui una singola lettera è cammello.

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

ha funzionato bene! –

1

non so il motivo per cui tutte queste soluzioni sono così complessi, ma ho semplicemente trovato questo per essere abbastanza:

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 l'opzione 1 è più veloce però: https://jsfiddle.net/4557z/17/

Problemi correlati