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?

MOI
la source

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.

CMS
la source
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
yurin
la source
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
Eesa
la source
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.).

Matias
la source
0

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

Abdo-Host
la source