字符串多个 replace 如何写性能更高?

string
.replace(/a/g, '!')
.replace(/b/g, '#')
.replace(/c/g, '没规律的')
.replace(/d/g, '没规律的')
.replace(/e/g, '没规律的')
// 以下省略20行
.....

以上,像这种字符串替换,源文本很大、高频率调用的情况下

如何写怎么省内存和提高性能呢?

阅读 6.4k
3 个回答
let mapReplace = {
    'a' : '!',
    'b' : '#',
    'c' : '没规律的',
    'd' : '没规律的',
};
<string>.replace(/a|b|c|d/g, function($match){
   if($match in mapReplace === true)
       return mapReplace[$match];
       
   return $match;
})

第一个回答,既然都用了 map 了那还在 replace 里面写啥/a|b|c|d/呢?
直接就用纯函数了呗,以后只用配置键值对就行了。

const str = 'STRINGabcd'

let mapReplace = {
  'a': '!',
  'b': '#',
  'c': '没规律',
  'd': '没规律的'
}

const replace = ({ str, reg, replacer }) =>
  str.replace(new RegExp(reg, 'g'), replacer)

const output = Object
  .keys(mapReplace)
  .reduce(
    (str, reg) => replace({ str, reg, replacer: mapReplace[reg] }),
    str
  )

console.log(output)

这个主要跟你的正则有关系

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