56 votes

Javascript - Comment supprimer tout espacement supplémentaire entre les mots

Comment supprimer tous les espaces supplémentaires entre les mots d'une chaîne littérale ?

"some    value"

Devrait devenir

"some value"

Aussi,

"    This    should  become   something          else   too . "

Devient

"This should become something else too ."

Ne vous inquiétez pas de déplacer le . . Comme ci-dessus, c'est bien. Je sais que je peux utiliser $.trim(str) pour réaliser la suppression de la trace et de l'espace final. Mais je ne sais pas comment faire l'astuce de l'espace entre les mots.

0 votes

Regex à la rescousse.... !

0 votes

Avez-vous essayé de chercher sur Google "supprimer tout espacement supplémentaire entre les mots en javascript" ? Le troisième lien est ce que vous recherchez lawrence.ecorp.net/inet/samples/regexp-format.php

0 votes

Massimiliano Peluso - Oui, c'est comme ça que j'ai trouvé $.trim() . En outre, j'apprends beaucoup plus de l'OS que d'un moteur de recherche.

102voto

Rob W Points 125904
var string = "    This    should  become   something          else   too . ";
string = string.replace(/\s+/g, " ");

Ce code remplace un ensemble consécutif de caractères d'espacement ( \s+ ) par un seul espace blanc. Notez qu'un caractère d'espace blanc comprend également la tabulation et les nouvelles lignes. Remplacer \s par un espace si vous souhaitez uniquement remplacer les espaces.

Si vous voulez également supprimer les espaces blancs au début et à la fin, incluez :

string = string.replace(/^\s+|\s+$/g, "");

Cette ligne supprime tous les caractères d'espace blanc au début ( ^ ) et la fin ( $ ). Le site g à la fin de la RegExp signifie : global, c'est-à-dire correspondre et remplacer toutes les occurrences.

9 votes

Var newString = string.replace(/^ \s +| \s +$/g, "").replace(/$/g, ""). \s +/g, " ") ;

17voto

James Hill Points 27532
var str = "    This    should  become   something          else   too . ";
str = str.replace(/ +(?= )/g,'');

Voici un violon de travail .

3 votes

Une petite explication sur la regex utilisée serait la bienvenue !

0 votes

Pourquoi une exp rég si compliquée alors qu'il suffit de \s+ ? Et pourquoi les lookaheads ne sont pas bons .

1 votes

Cela signifie que vous remplacez un ou plusieurs caractères d'espacement / + - qui précèdent un caractère d'espacement (?= ) tout au long de la chaîne /g avec rien ,'' . Vous pouvez en savoir plus à ce sujet aquí

8voto

V-SHY Points 2444

Dans le cas où nous voulons éviter la fonction de remplacement avec regex,

Nous pouvons obtenir le même résultat en

str.split(' ').filter(s => s).join(' ')
// var str = "    This    should  become   something          else   too . ";
// result is "This should become something else too ."

Tout d'abord, on sépare la chaîne de caractères originale par un espace, puis on obtient une chaîne vide et des mots dans un tableau. Ensuite, on filtre pour ne garder que les mots, puis on joint tous les mots avec un espace.

0 votes

Veuillez décrire davantage

0 votes

Pourquoi ce filtre fonctionne-t-il ?

1 votes

@hamidrezaghanbari le paragraphe en dessous du code est ma description pour le code, après la division avec l'espace, alors vous aurez seulement la chaîne vide et la chaîne, filtrez la chaîne vide puis les mots à gauche, puis rejoignez les mots avec l'espace simple puis devenez la phrase normale.

4voto

Narendra Yadala Points 5685
var str = "    This    should  become   something          else   too . "
$.trim(str).replace(/\s(?=\s)/g,'')

Cette méthode utilise le lookahead pour remplacer les espaces multiples par un espace unique.

3voto

used2could Points 3409

Exemple de jsFiddle

"    This    should  become   something          else   too . ".replace(/[\s\t]+/g,' ');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X