具体解决方案
您可以使用一个函数替换每个函数。
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];});概括它
如果您要动态维护正则表达式并仅将将来的交换添加到地图,则可以执行此操作
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



