在Javascript中使用正则表达式一次替换多个字符串

时间:2013-12-23 12:33:08

标签: javascript regex

我试过了:Replace multiple strings at once 而且:javascript replace globally with array他们怎么都不工作。

我可以这样做(它的PHP):

$a = array('a','o','e');
$b = array('1','2','3');
str_replace($a,$b,'stackoverflow');

结果将是:

st1ck2v3rfl2w

我想同时使用正则表达式。我怎样才能做到这一点 ? 谢谢。

3 个答案:

答案 0 :(得分:12)

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];
});

Check fiddle

答案 1 :(得分:6)

一种可能的解决方案:

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)];
});

N.B。:检查browser compatibility indexOf方法并根据需要使用polyfill

答案 2 :(得分:0)

您可以使用定界符并替换字符串的一部分

var obj = {
  'firstname': 'John',
  'lastname': 'Doe'
}

var text = "My firstname is {firstname} and my lastname is {lastname}"

console.log(mutliStringReplace(obj,text))

function mutliStringReplace(object, string) {
      var val = string
      var entries = Object.entries(object);
      entries.filter((para)=> {
          var find = '{' + para[0] + '}'
          var regExp = new RegExp(find,'g')
       val = val.replace(regExp, para[1])
    })
  return val;
}