202 votes

Remplacer plusieurs espaces par un seul espace dans une chaîne JavaScript

J'ai des chaînes de caractères avec des espaces supplémentaires, chaque fois qu'il y a plus d'un espace, je voudrais qu'il n'y en ait qu'un seul.

Quelqu'un ? J'ai essayé de chercher sur Google, mais rien n'a marché pour moi.

Merci

2 votes

Supprimer les espaces blancs en double à la fin/au début, ou n'importe où dans le texte ?

1 votes

385voto

bjornd Points 11457

Quelque chose comme ça :

var s = "  a  b     c  ";

console.log(
  s.replace(/\s+/g, ' ')
)

31 votes

@Me Veuillez lire attentivement la question : "chaque fois qu'il y a plus d'un espace blanc, je voudrais qu'il n'y en ait qu'un seul".

5 votes

N'est-ce pas évident ? Il remplace plus d'un caractère d'espacement par un caractère d'espacement. (le résultat souhaité)

4 votes

@CiaranG C'est une expression normale.

60voto

gui pn Points 620

Vous pouvez augmenter String pour implémenter ces comportements comme des méthodes, comme dans :

String.prototype.killWhiteSpace = function() {
    return this.replace(/\s/g, '');
};

String.prototype.reduceWhiteSpace = function() {
    return this.replace(/\s+/g, ' ');
};

Cela vous permet maintenant d'utiliser les formes élégantes suivantes pour produire les chaînes de caractères que vous souhaitez :

"Get rid of my whitespaces.".killWhiteSpace();
"Get rid of my extra        whitespaces".reduceWhiteSpace();

16 votes

L'augmentation du prototype de l'objet standard est un modèle vraiment controversé. Je ne le recommanderais pas pour une question aussi basique.

19voto

Roger Gajraj Points 305

L'utilisation d'une expression régulière avec la fonction de remplacement fait l'affaire :

string.replace(/\s/g, "")

0 votes

Cette solution est fausse par rapport à la question. Et je me demande vraiment pourquoi vous l'avez postée deux jours après qu'une meilleure solution ait été postée...

0 votes

Je pense qu'à l'époque, seul ce code a fonctionné pour moi. Je ne peux pas revenir en arrière pour le confirmer. J'aurais évidemment essayé la meilleure solution en premier. De plus, en vérifiant dans la console de chrome, les deux solutions semblaient fonctionner. Il est toutefois intéressant de noter que, lorsque j'ai copié le résultat dans cette boîte de commentaires, il est apparu que ma solution ne fonctionnait pas pour les espaces blancs multiples. Peut-être pouvez-vous m'aider à comprendre pourquoi. Je suppose que c'est une erreur de chrome ? Essayez d'exécuter mon code dans la console de chrome et faites-moi savoir.

12voto

Spudley Points 85371

Je suppose que vous cherchez à supprimer les espaces du début et/ou de la fin de la chaîne (plutôt que de supprimer les espaces de la chaîne). todo des espaces ?

Si c'est le cas, vous aurez besoin d'une regex comme celle-ci :

mystring = mystring.replace(/(^\s+|\s+$)/g,' ');

Cela supprimera tous les espaces du début ou de la fin de la chaîne. Si vous souhaitez uniquement supprimer les espaces de la fin, la regex ressemblera plutôt à ceci :

mystring = mystring.replace(/\s+$/g,' ');

J'espère que cela vous aidera.

4 votes

J'aime la simplicité de votre regex, @Spudley, mais votre code ne va-t-il pas remplacer les espaces au début et à la fin par un seul caractère d'espace ? Je pensais que l'objectif était de supprimer entièrement les espaces à la fin, auquel cas la chaîne de remplacement devrait être la suivante '' au lieu de ' ' .

8voto

chug2k Points 935

JQuery.trim() fonctionne bien.

http://api.jquery.com/jQuery.trim/

14 votes

N'oubliez pas que cela ne supprime pas tous les espaces. Je cite la documentation : "Supprimez les espaces blancs du début et de la fin d'une chaîne de caractères ."

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