Ersetzen Sie Leerzeichen durch Bindestriche und machen Sie alle Buchstaben in Kleinbuchstaben

247

Ich muss einen String mit jQuery oder Vanilla JavaScript neu formatieren

Nehmen wir an, wir haben "Sonic Free Games".

Ich möchte es konvertieren "sonic-free-games".

Leerzeichen sollten daher durch Bindestriche ersetzt und alle Buchstaben in Kleinbuchstaben umgewandelt werden.

Irgendwelche Hilfe dazu bitte?

MICH
quelle

Antworten:

549

Verwenden Sie einfach den String replaceund die toLowerCaseMethoden, zum Beispiel:

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

Beachten Sie das gFlag auf RegExp, das die Ersetzung global innerhalb der Zeichenfolge vornimmt. Wenn es nicht verwendet wird, wird nur das erste Vorkommen ersetzt, das auch RegExpeinem oder mehreren Leerzeichen entspricht.

CMS
quelle
52
Eine Variation, die ich mir ausgedacht habe, verwendet \ W, das jedes nichtalphanumerische Zeichen darstellt. Dies ist nützlich für etwas wie "A & P Grocery", das zu "Ap-Grocery" werden würde. str.replace(/\W+/g, '-').toLowerCase();
Adam Waselnuk
1
Achten Sie auf den regexp Teil nicht zu zitieren, das heißt replace(/\s+/g, ..und nicht replace('/\s+/f', .. (ohne Apostroph)
Attila Fulop
Was ist, wenn ich die Leerzeichen am Anfang und Ende der Zeichenfolge entfernen möchte?
Romel Indemne
@RomelIndemne Heutzutage können Sie die String.prototype.trimMethode verwenden:str.trim().replace(/\s+/g, '-').toLowerCase()
CMS
Danke, Netter. Jetzt brauche ich den umgekehrten Weg um xD JK
lawphotog
34

Die obige Antwort kann als etwas verwirrend angesehen werden. String-Methoden ändern das ursprüngliche Objekt nicht. Sie geben ein neues Objekt zurück. Es muss sein:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase(); //new object assigned to var str
Yurin
quelle
10
Ich denke, es ist wichtig zu beachten, dass die akzeptierte Antwort bearbeitet wurde, um dieses Konzept aufzunehmen
Dexygen
31

Sie können auch verwenden splitund join:

"Sonic Free Games".split(" ").join("-").toLowerCase(); //sonic-free-games
Eesa
quelle
Beachten Sie Nebenfälle
1

Die Antwort von @ CMS ist in Ordnung, aber ich möchte darauf hinweisen, dass Sie dieses Paket verwenden können: https://github.com/sindresorhus/slugify , das dies für Sie erledigt und viele Randfälle abdeckt (z. B. deutsche Umlaute, Vietnamesisch, Arabisch) , Russisch, Rumänisch, Türkisch usw.).

Matias
quelle
0

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

Abdo-Host
quelle