Sostituisci gli spazi con trattini e rendi tutte le lettere minuscole


247

Devo riformattare una stringa usando JavaScript jQuery o vanilla

Diciamo che abbiamo "Sonic Free Games".

Voglio convertirlo in "sonic-free-games".

Quindi gli spazi bianchi dovrebbero essere sostituiti da trattini e tutte le lettere convertite in lettere minuscole.

Qualche aiuto su questo per favore?

Risposte:


549

Usa la stringa replacee i toLowerCasemetodi, ad esempio:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase();
console.log(str); // "sonic-free-games"

Notare il gflag su RegExp, effettuerà la sostituzione a livello globale all'interno della stringa, se non viene utilizzato, verrà sostituita solo la prima occorrenza e anche, che RegExpcorrisponderà a uno o più caratteri di spazi bianchi.


52
Una variante che ho inventato usa \ W che rappresenta qualsiasi carattere non alfanumerico. Questo è utile per qualcosa come "A&P Grocery" che diventerebbe "ap-drogheria". str.replace(/\W+/g, '-').toLowerCase();
Adam Waselnuk,

1
Mente di non citare la parte regexp, cioè replace(/\s+/g, ..e non replace('/\s+/f', .. (senza apostrofi)
Attila Fulop

Cosa succede se desidero rimuovere gli spazi all'inizio e alla fine della stringa?
Romel Indemne,

@RomelIndemne Oggi puoi usare il String.prototype.trimmetodo:str.trim().replace(/\s+/g, '-').toLowerCase()
CMS

Grazie, gentile. Ora ho bisogno del contrario xD JK
Lawphotog

34

La risposta sopra può essere considerata un po 'confusa. I metodi stringa non stanno modificando l' oggetto originale. Essi restituiscono nuovo oggetto. Dev'essere:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase(); //new object assigned to var str

10
Penso che sia importante notare che la risposta accettata è stata modificata per incorporare questo concetto
Dexygen

31

Puoi anche usare splite join:

"Sonic Free Games".split(" ").join("-").toLowerCase(); //sonic-free-games

Fai attenzione ai casi collaterali, ad esempio dove all'inizio c'è spazio, non verranno sostituiti
Bonjour123

1

La risposta di @ CMS va bene, ma voglio notare che puoi usare questo pacchetto: https://github.com/sindresorhus/slugify , che lo fa per te e copre molti casi limite (ad esempio, umlaut tedeschi, vietnamita, arabo , Russo, rumeno, turco, ecc.).


0

var str = "Tatwerat Development Team";
str = str.replace(/\s+/g, '-');
console.log(str);
console.log(str.toLowerCase())

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.