起因
事情的起因是这样子的:
最近有个小伙伴跑来问我讨论一个小问题,说有一段字符串,需要根据长度不同来隐藏中间的文字 信息,用 * 号代替,问我应该怎么做~
我一听,立马就想到几个方法:
- 使用正则表达式匹配并替换
- 将字符串转为数组,然后根据下标提取其中的元素拼接成字符串
- 直接循环字符串新建字符串然后拼接,这其实跟第2点是一样的~
这几个方法的思路都是一样的,就是提取某个字符串然后替换或者拼接,达到目的。
其实,这只是前端方面的障眼法,如果真的想要隐藏部分信息,这应该由后端来处理并直接返回结果字符串~咳咳,跑题了,既然要前端来做,我们自然要好好做出来才对~~
正则表达式
如果使用正则表达式的话,可以使用 string.replace(a, b)方法,该方法用于在字符串中查找并替换指定的子字符串。其中,a
可以是一个字符串或一个正则表达式,表示要查找的子字符串。b
是要替换搜索到的子字符串的新字符串。
replace()
方法返回一个新字符串,其中所有匹配的子字符串都被替换为指定的新字符串。
- 替换字符串:
let str = 'abcdabc'
// 替换一次
console.log(str.replace('ab', '**')) // **cdabc
//替换所有
console.log(str.replaceAll('ab', '**')) // **cd**c
- 正则匹配替换
let str = 'abcdabc'
// 替换一次
console.log(str.replace(/ab/, '**')) // **cdabc
//替换全局(g)
console.log(str.replace(/ab/g, '**')) // **cd**c
- 正则表达式匹配
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