我试过这个:一次替换多个字符串 这个:javascript用数组全局替换它们如何不工作.
我可以这样做(它的PHP):
$a = array('a','o','e'); $b = array('1','2','3'); str_replace($a,$b,'stackoverflow');
结果将是:
st1ck2v3rfl2w
我想同时使用正则表达式.我怎样才能做到这一点 ?谢谢.
一种可能的方案:
var a = ['a','o','e'], b = ['1','2','3']; 'stackoverflow'.replace(new RegExp(a.join('|'), 'g'), function(c) { return b[a.indexOf(c)]; });
根据@Stephen M. Harris的评论,这是另一个更加万无一失的解决方案:
'stackoverflow'.replace(new RegExp(a.map(function(x) { return x.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); }).join('|'), 'g'), function(c) { return b[a.indexOf(c)]; });
注意:检查方法的浏览器兼容性,indexOf
并根据需要使用polyfill.
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]; });
检查小提琴