web-dev-qa-db-fra.com

JavaScript .replace ne remplace que le premier match

var textTitle = "this is a test"
var result = textTitle.replace(' ', '%20');

Mais les fonctions de remplacement s’arrêtent à la première instance du "" et j’obtiens le

Résultat : "this%20is a test"

Toutes les idées sur les endroits où je vais mal je suis sûr que c'est une solution simple.

106
Yardstermister

Vous avez besoin d'un /g, Comme ceci:

var textTitle = "this is a test";
var result = textTitle.replace(/ /g, '%20');

console.log(result);

vous pouvez y jouer ici , le comportement .replace() par défaut consiste à remplacer uniquement la première correspondance, le modificateur /g (global) lui dit de remplacer toutes les occurrences.

196
Nick Craver
textTitle.replace(/ /g, '%20');
7
Nikita Rybak

Essayez d'utiliser une expression régulière au lieu d'une chaîne pour le premier argument.

"this is a test".replace(/ /g,'%20') // # => "ceci% 20is% 20a% 20test"

4
J. Holmes

De w3schools

La méthode replace () recherche une correspondance entre une sous-chaîne (ou une expression régulière) et une chaîne, et remplace la sous-chaîne correspondante par une nouvelle sous-chaîne.

Il serait préférable d'utiliser une expression régulière ici:

textTitle.replace(/ /g, '%20');

Pour cela, vous ne devez pas utiliser le drapeau g de regex .... Comme ceci:

var new_string=old_string.replace( / (regex) /g,  replacement_text);

Ce sh

2
Subham Debnath

Idem si vous avez besoin d'une expression rationnelle "générique" à partir de la chaîne:

const textTitle = "this is a test";
const regEx = new RegExp(' ', "g");
const result = textTitle.replace(regEx , '%20');
console.log(result); // "this%20is%20a%20test" will be a result
    
0
Nigrimmist