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

9
我尝试了这个:一次替换多个字符串 和这个:使用数组全局替换JavaScript,但它们都不起作用。
我能不能像这样做(这是PHP):
$a = array('a','o','e');
$b = array('1','2','3');
str_replace($a,$b,'stackoverflow');

这个结果将是:

st1ck2v3rfl2w

我想同时使用正则表达式。我该怎么做?谢谢。


您可以使用分隔符查找并替换字符串。点击此处 - Naresh Kumar
这个回答解决了你的问题吗?一次性替换多个字符串 - Stephen M. Harris
3个回答

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

查看 fiddle


5
一个可能的解决方案:
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


如果查找字符串包含任何特殊的正则表达式字符,这可能会出现错误。 这是一个改进版本(也是跨浏览器的,无需填充)。https://dev59.com/t2445IYBdhLWcg3wDV4P#37949642 - Stephen M. Harris
@StephenM.Harris 我添加了另一种变体,可以处理带有特殊正则表达式字符的边缘情况。 - VisioN

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接