【问题标题】:Replace Multiple String at Once With Regex in Javascript用 Javascript 中的正则表达式一次替换多个字符串
【发布时间】:2014-01-11 16:19:51
【问题描述】:

我试过这个: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

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

【问题讨论】:

标签: javascript regex


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    一种可能的解决方案:

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

    注意:检查browser compatibilityindexOf 方法并在需要时使用polyfill

    【讨论】:

    • 如果查找字符串包含任何特殊的正则表达式字符,这可能会中断。这是一个改进的版本(也是跨浏览器没有 polyfills)stackoverflow.com/a/37949642/445295
    • @StephenM.Harris 我添加了另一个变体,它将处理带有特殊正则表达式字符的边缘情况。
    【解决方案3】:

    您可以使用分隔符并替换部分字符串

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      相关资源
      最近更新 更多