正则表达式的基础知识11

174 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情

今天有一个面试题,面试官说要将用户的手机号码后四位加密,那这个简单的问题怎么可以能难到的住实则棒,实则棒直接给了一个正则,首先断言4个数字前面必须有7个数字,说明这个是个手机号,然后把这个后四位分组,replace一下,把后四位换成了🌟号。

let shizebang= `
实则棒手机号: 15232389345
shuanQ手机号: 15232389543
`

const reg=/(?<=\d{7}(\d{4}))/ig
console.log(shizebang.replace(reg,(v,...arg)=>{
 return "****"
}))

?! 后面不是啥的断言

后面不是数字的a-b的字符,没啥说的,没有这个断言也是可以的

let shizebang= `shizebang2021
sb`


const reg=/[a-z]+(?!\d)$/ig
console.log(shizebang.replace(reg,(v,...arg)=>{
  console.log(arg)
 return "****"
}))

(?!.xx.)任何地方都不能包含

有这么一个需要,就是不能包含一段字符串,前面也不行,后面也不行,中间也不行,怎么写呢,难不倒实则棒,实则棒直接写个正则,(?!.实则棒.)不能以实则棒开头,不能以实则棒结尾,不能包含实则棒,除了实则棒,什么都可以i啊

let shizebang= `shizeb实则棒ang2021b`


const reg=/^(?!.*实则棒.*).*$/i;
const ok=reg.test(shizebang)
console.log(ok,22)

?<!不是以xxx开头的字符串 知道了以什么结束的字符串,也知道了以什么开始的字符串,这个是不以什么开始的字符串,首先问号是断言的意思,<是前面的意思,!是不等于,取非的意思,链接起来的意思就是断言开头不是数字的a-z的任意字符组成的字符串集合 ,然后使用正则匹配shizebang这个字符串,匹配的最终结果就是fasf。

let shizebang= `21222332sfasf`


const reg=/(?<!\d+)[a-z]+/i;
const ok=shizebang.match(reg)
console.log(ok,22)