js 实现字符串隐藏部分信息

351 阅读2分钟
起因

事情的起因是这样子的:

最近有个小伙伴跑来问我讨论一个小问题,说有一段字符串,需要根据长度不同来隐藏中间的文字 信息,用 * 号代替,问我应该怎么做~

我一听,立马就想到几个方法:

  1. 使用正则表达式匹配并替换
  2. 将字符串转为数组,然后根据下标提取其中的元素拼接成字符串
  3. 直接循环字符串新建字符串然后拼接,这其实跟第2点是一样的~

这几个方法的思路都是一样的,就是提取某个字符串然后替换或者拼接,达到目的。

其实,这只是前端方面的障眼法,如果真的想要隐藏部分信息,这应该由后端来处理并直接返回结果字符串~咳咳,跑题了,既然要前端来做,我们自然要好好做出来才对~~

正则表达式

如果使用正则表达式的话,可以使用 string.replace(a, b)方法,该方法用于在字符串中查找并替换指定的子字符串。其中,a 可以是一个字符串或一个正则表达式,表示要查找的子字符串。b 是要替换搜索到的子字符串的新字符串。

replace() 方法返回一个新字符串,其中所有匹配的子字符串都被替换为指定的新字符串。

  1. 替换字符串:
let str = 'abcdabc'

// 替换一次
console.log(str.replace('ab', '**'))  // **cdabc

//替换所有
console.log(str.replaceAll('ab', '**')) // **cd**c
  1. 正则匹配替换
let str = 'abcdabc'

// 替换一次
console.log(str.replace(/ab/, '**'))  // **cdabc

//替换全局(g)
console.log(str.replace(/ab/g, '**')) // **cd**c

  1. 正则表达式匹配
console.log(str.replace(/ab(.*?).*ab(.*?)/, '$1**$2'))
字符串遍历拼接

除了使用 replace 方法,还可以直接遍历字符串进行拼接

let str = 'abcdabc'

let arr = str.split('')
let res = ''
for(let i = 0; i < arr.length; i++) {
    if(arr[i] == 'a' || arr[i] == 'b') {
        res += '*'
    } else {
        res += arr[i]
    }

console.log(res)   // **cd**c

如果觉得代码比较长,也可以直接:

let res = arr.map(item => {
    if(item == 'a' || item == 'b') { return '*' }
    else { return item }
})
console.log(res.join(''))   // **cd**c