Konkretne rozwiązanie
Możesz użyć funkcji, aby zastąpić każdą z nich.
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];
});
przykład jsfiddle
Uogólniając to
Jeśli chcesz dynamicznie utrzymywać wyrażenie regularne i po prostu dodawać przyszłe wymiany do mapy, możesz to zrobić
new RegExp(Object.keys(mapObj).join("|"),"gi");
wygenerować wyrażenie regularne. Więc to wyglądałoby tak
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];
});
Aby dodać lub zmienić więcej zamienników, wystarczy edytować mapę.
skrzypce z dynamicznym wyrażeniem regularnym
Dzięki temu jest wielokrotnego użytku
Jeśli chcesz, aby był to ogólny wzorzec, możesz wyciągnąć to do takiej funkcji
function replaceAll(str,mapObj){
var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
return str.replace(re, function(matched){
return mapObj[matched.toLowerCase()];
});
}
Więc możesz po prostu przekazać str i mapę zamienników, które chcesz do funkcji, i zwróci transformowany ciąg.
skrzypce z funkcją
Aby upewnić się, że Object.keys działa w starszych przeglądarkach, dodaj polifill np. Z MDN lub Es5 .