您如何在 Javascript 中映射替换字符,类似于 Perl 中的“tr”函数?

新手上路,请多包涵

我一直在试图弄清楚如何将字符串中的一组字符映射到另一组类似于 Perl 中的 tr 函数。

我发现 这个站点显示了 JS 和 Perl 中的等效函数,但遗憾的是没有 tr 等效函数。

Perl中的 tr (音译)函数将字符一对一映射,所以

     data =~ tr|\-_|+/|;

会映射

     - => + and _ => /

如何在 JavaScript 中有效地完成这项工作?

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

阅读 449
2 个回答

没有内置的等效项,但您可以使用 replace 接近一个:

 data = data.replace(/[\-_]/g, function (m) {
    return {
        '-': '+',
        '_': '/'
    }[m];
});

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

方法:

 String.prototype.mapReplace = function(map) {
    var regex = [];
    for(var key in map)
        regex.push(key.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"));
    return this.replace(new RegExp(regex.join('|'),"g"),function(word){
        return map[word];
    });
};

一个完美的例子:

 var s = "I think Peak rocks!"
s.mapReplace({"I think":"Actually","rocks":"sucks"})
// console: "Actually Peak sucks!"

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

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