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 unreplace(/%20/g, '+')
après, bien sûr. Vous pourriez être tenté d'utiliserescape()
car il utilise+
mais il se trompe également sur tous les caractères non ASCII - à éviter.1 votes
Je suis d'accord avec cela, la question a du mérite en soi :) Je voulais juste savoir si c'est là où vous vouliez en venir, il y a peut-être de meilleures solutions pour vous. Mais oui, la question est bonne en soi, sans aucun doute. Je connais assez de javascript pour m'en sortir, et le fait que .replace ne remplace pas toutes les occurrences était une nouvelle pour moi.
3 votes
Comparaison de regex et de split/join sur des chaînes de caractères minuscules et longues. jsperf.com/remplacer les caractères dans la chaîne de caractères
0 votes
Vous avez attendu 4 ans pour le lancer ?
1 votes
La réponse de @Andrew ci-dessous est la plus juste,
str.replace(/\s+/g, '+')
parce que si votre chaîne de caractères contraint l'enchaînement des espaces, elle remplacera également les espaces d'enchaînement par un seul remplacement, par ex.a----b--c-d
seraa+b+c+d
. C'est plus logique. N'est-ce pas ?0 votes
Dans les dernières versions des navigateurs les plus populaires, vous pouvez utiliser replaceAll comme indiqué ici :
let result = "a b c".replaceAll(" ", "+");
// result is "a+b+c"