具体解决方案
您可以使用一个函数来替换每个函数。
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];
});
jsfiddle 示例
概括它
如果您想动态维护正则表达式并将未来的交换添加到地图中,您可以这样做
new RegExp(Object.keys(mapObj).join("|"),"gi");
生成正则表达式。那么它看起来像这样
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];
});
要添加或更改更多替换,您只需编辑地图即可。
摆弄动态正则表达式
使其可重用
如果您希望这是一个通用模式,您可以将其拉出到这样的函数中
function replaceAll(str,mapObj){
var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
return str.replace(re, function(matched){
return mapObj[matched.toLowerCase()];
});
}
因此,您可以将 str 和您想要的替换映射传递给函数,它会返回转换后的字符串。
摆弄功能
要确保 Object.keys 在旧浏览器中工作,请添加一个 polyfill,例如来自MDN或Es5。