448 votes

Remplacer tous les espaces dans une chaîne par '+'.

J'ai une chaîne de caractères qui contient plusieurs espaces. Je veux les remplacer par un symbole plus. Je pensais pouvoir utiliser

var str = 'a b c';
var replaced = str.replace(' ', '+');

mais il ne remplace que la première occurrence. Comment puis-je faire en sorte qu'il remplace toutes les occurrences ?

8 votes

Essayez-vous de coder l'URL d'une chaîne de caractères ? Si c'est le cas, il est préférable de demander de l'aide à ce sujet plutôt que de demander comment gérer les espaces.

2 votes

@Lasse, je suppose qu'en fin de compte c'est ce que j'essaie de faire puisque la chaîne que je veux formater fera finalement partie d'une URL. Cependant, je pense que la question reste valable en soi, car remplacer toutes les occurrences d'une sous-chaîne à l'intérieur d'une chaîne n'est pas immédiatement évident.

15 votes

C'est vrai, c'est ce que je soupçonnais aussi. La réponse à cette question est : utilisez encodeURIComponent() . N'essayez pas de le faire vous-même avec un remplacement de chaîne ; c'est beaucoup plus délicat que vous ne le pensez. Ceci va encoder les espaces en %20 plutôt que + cependant. %20 est tout aussi valable (en fait plus valable, car il fonctionne dans les composants de chemin, alors que + ne signifie qu'un espace dans les composants de la requête), mais si vous voulez que cela soit un peu plus joli, vous pouvez toujours faire un replace(/%20/g, '+') après, bien sûr. Vous pourriez être tenté d'utiliser escape() car il utilise + mais il se trompe également sur tous les caractères non ASCII - à éviter.

598voto

Nick Craver Points 313913

Vous avez besoin de la /g (global), comme ceci :

var replaced = str.replace(/ /g, '+');

Vous pouvez l'essayer ici . Contrairement à la plupart des autres langages, JavaScript, par défaut, ne remplace que la première occurrence.

1 votes

Cette version est plus facile à lire que la version split/join, à mon avis.

1 votes

Oh, mon... J'ai essayé d'innombrables fois de '/ /g' ou quelque chose comme ça, il ne devrait pas y avoir de guillemets. Ça m'a étonné.

597voto

Dagg Nabbit Points 23918

Voici une alternative qui ne nécessite pas de regex :

var str = 'a b c';
var replaced = str.split(' ').join('+');

31 votes

Cette solution choisie est plus lente sur les grands remplacements par rapport à la version expression reg. Testez avec les 3 solutions affichées : jsbin.com/isadi3/2 Firefox a une différence de temps minimale, IE a une différence notable. Donc, si la vitesse est importante et que vous avez un grand nombre de remplacements, reg exp est la voie à suivre.

50 votes

Utiliser str = str.replace(/ \s /g, "+") ;

4 votes

@JitendraPancholi qui remplace tous les espaces, pas seulement le caractère espace. L'autre réponse regex ici est bonne.

124voto

epascarello Points 71353
var str = 'a b c';
var replaced = str.replace(/\s/g, '+');

8 votes

Plus propre et plus rapide que la solution choisie ; fonctionne dans les cas suivants / /g ne le fait pas.

99voto

Jitendra Pancholi Points 1256

Vous pouvez aussi le faire comme ça :

str = str.replace(/\s/g, "+");

Jetez un coup d'œil à ceci violon .

0 votes

Pourriez-vous expliquer pourquoi cette solution est la bonne pour résoudre le problème ?

1 votes

Ce n'était pas mon downvote, j'ai reçu une tâche de révision à vérifier en raison de la longueur du contenu. Je suppose que quelqu'un de plus exigeant n'a pas vu l'explication et a rétrogradé sans prendre la peine de commenter. Veuillez mettre votre commentaire en réponse.

0 votes

Ok, j'ai ajouté fiddle dans ma réponse.

32voto

Andrew Points 205

Utiliser la recherche globale dans la chaîne. g flag

str.replace(/\s+/g, '+');

source : fonction replaceAll

1 votes

J'ai testé de nombreuses regex au-dessus de votre réponse, mais la vôtre est la plus juste, car elle remplace également les espaces blancs en chaîne multiples.

4 votes

Ne fonctionne pas : Démo Entrée : "hello !!!" , résultat attendu : "hello++++!!!" , sortie réelle : "hello+!!!"

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