在一次替换调用中替换多个字符

新手上路,请多包涵

我需要将“_”的每个实例替换为空格,将“#”的每个实例替换为空/空。

var string = '#Please send_an_information_pack_to_the_following_address:';

我试过这个:

string.replace('#','').replace('_', ' ');

我真的不喜欢这样的链接命令。有没有另一种方法可以做到这一点?

原文由 Shannon Hochkins 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 715
2 个回答

如果你想替换多个字符,你可以调用 String.prototype.replace() ,替换参数是每次匹配调用的函数。您只需要一个表示您将在该函数中使用的字符映射的对象。

例如,如果您想 a 替换为 x ,将 b 替换为 y ,将 c 替换为 z ,您可以执行以下操作:

 var chars = {'a':'x','b':'y','c':'z'};
 var s = '234abc567bbbbac';
 s = s.replace(/[abc]/g, m => chars[m]);
 console.log(s);

输出234xyz567yyyyxz

原文由 Voicu 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 OR 运算符( | ):

 var str = '#this #is__ __#a test###__';
str.replace(/#|_/g,''); // result: "this is a test"

您还可以使用字符类:

 str.replace(/[#_]/g,'');

小提琴

如果你想用一个东西替换散列而用另一个替换下划线,那么你只需要链接。但是,您可以添加一个原型:

 String.prototype.allReplace = function(obj) {
    var retStr = this;
    for (var x in obj) {
        retStr = retStr.replace(new RegExp(x, 'g'), obj[x]);
    }
    return retStr;
};

console.log('aabbaabbcc'.allReplace({'a': 'h', 'b': 'o'}));
// console.log 'hhoohhoocc';

为什么不链呢?我认为这没有错。

原文由 tckmn 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏