Solution spécifique
Vous pouvez utiliser une fonction pour remplacer chacun d'eux.
var str = "I have a cat, a dog, and a goat.";
var mapObj = {
cat:"dog",
dog:"goat",
goat:"cat"
};
str = str.replace(/cat|dog|goat/gi, function(matched){
return mapObj[matched];
});
exemple jsfiddle
La généraliser
Si vous souhaitez maintenir dynamiquement l'expression régulière et simplement ajouter de futurs échanges à la carte, vous pouvez le faire
new RegExp(Object.keys(mapObj).join("|"),"gi");
pour générer l'expression régulière. Alors ça ressemblerait à ça
var mapObj = {cat:"dog",dog:"goat",goat:"cat"};
var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
str = str.replace(re, function(matched){
return mapObj[matched];
});
Et pour ajouter ou modifier d'autres remplacements, vous pouvez simplement modifier la carte.
violon avec regex dynamique
Rendre réutilisable
Si vous voulez que ce soit un modèle général, vous pouvez le retirer à une fonction comme celle-ci
function replaceAll(str,mapObj){
var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
return str.replace(re, function(matched){
return mapObj[matched.toLowerCase()];
});
}
Donc, vous pouvez simplement passer la str et une carte des remplacements que vous souhaitez à la fonction et cela retournera la chaîne transformée.
violon avec fonction
Pour garantir que Object.keys fonctionne dans les anciens navigateurs, ajoutez un polyfill, par exemple à partir de MDN ou Es5 .