Remplacez les espaces par des tirets et mettez toutes les lettres en minuscules


247

J'ai besoin de reformater une chaîne en utilisant jQuery ou vanilla JavaScript

Disons que oui "Sonic Free Games".

Je veux le convertir en "sonic-free-games".

Les espaces doivent donc être remplacés par des tirets et toutes les lettres converties en minuscules.

Une aide à ce sujet s'il vous plaît?

Réponses:


549

Utilisez simplement la chaîne replaceet les toLowerCaseméthodes, par exemple:

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

Remarquez le gdrapeau sur le RegExp, il fera le remplacement globalement dans la chaîne, s'il n'est pas utilisé, seule la première occurrence sera remplacée, et aussi, qui RegExpcorrespondra à un ou plusieurs caractères d'espace blanc.


52
Une variante que j'ai trouvée utilise \ W qui représente tout caractère non alphanumérique. Ceci est utile pour quelque chose comme «A&P Grocery» qui deviendrait «ap-grocery». str.replace(/\W+/g, '-').toLowerCase();
Adam Waselnuk

1
Attention à ne pas citer la partie regexp, c'est à dire replace(/\s+/g, ..et non replace('/\s+/f', .. (sans apostrophes)
Attila Fulop

Que faire si je souhaite supprimer les espaces au début et à la fin de la chaîne?
Romel Indemne

@RomelIndemne De nos jours, vous pouvez utiliser la String.prototype.trimméthode:str.trim().replace(/\s+/g, '-').toLowerCase()
CMS

Merci, gentil. Maintenant, j'ai besoin de l'inverse xD JK
lawphotog

34

La réponse ci-dessus peut être considérée comme un peu déroutante. Les méthodes de chaîne ne modifient pas l'objet d'origine. Ils retournent un nouvel objet. Ce doit être:

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

10
Je pense qu'il est important de noter que la réponse acceptée a été modifiée pour intégrer ce concept
Dexygen

31

Vous pouvez également utiliser splitet join:

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

Soyez conscient des side-cases, par exemple où certains espaces sont au début, ils ne seront pas remplacés
Bonjour123

1

La réponse de @ CMS est très bien, mais je tiens à noter que vous pouvez utiliser ce package: https://github.com/sindresorhus/slugify , qui le fait pour vous et couvre de nombreux cas marginaux (par exemple, les trémas allemands, vietnamien, arabe , Russe, roumain, turc, etc.).


0

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.