正则小知识-断言

反向断言

检查某个字符后面的字符是否不满足某个规则,该规则不成为匹配结果,并且不成为捕获组

语法:

(?![正则表达式])
// 完美匹配ABAB 
const str = "开心开心 说道说道 1212 你好你好 阿达的撒旦大 牛 牛 打到我 6666 牛牛牛牛 12大味道 打打打打打打住"
const reg = /(\S)(?!\1)(\S)\1\2/g
// (\S) 匹配任意一个非空白字符
// (?!\1)比较后面一个匹配字符是否与第一个捕获组捕获的字符不同
// \1\2 引用第一个和第二个捕获组捕获的结果
console.log(str.match(reg));
// 输出如下:
 ['开心开心', '说道说道', '1212', '你好你好']

正向断言

检查某个字符后面的字符是否满足某个规则,该规则不成为匹配结果,并且不成为捕获组

语法:

(?=[正则表达式])
// 将数字字符串转换成以下格式 2312312 => 2,312,312
const str = "123456789"
const reg = /(\B(?=(\d{3})+$)/g
// \B匹配非单词边界
// \d{3} 匹配三个数字
// (\d{3})+$ 匹配一个或多个三个数字的组合并且以他结尾 即匹配 三的倍数个的数字个数,并且作为结尾
// 所以整个整个表达式的意思为 除单词边界外,匹配在空字符后拥有数字个数为三的倍数,并且以它作为结尾的空字符
// 匹配过程如下:'1'前面的位置进行匹配,为单词边界进行跳过
从'2'前面的位置进行匹配,后面有八个数字作为结尾,不是三的倍数进行跳过
从'3'前面的位置进行匹配,后面有七个数字作为结尾,不是三的倍数进行跳过
从'4'前面的位置进行匹配,后面有六个数字作为结尾,是三的倍数,将该位置替换成','
以此类推
console.log(str.replace(reg,","))
// 输出如下:
123,456,789
// 判断密码强度
// 要求密码中必须出现小写字母、大写字母、数字、特殊字符(!@#_,.),6-12位
// 判断密码强度
// 密码长度必须是6-12位
// 出现小写字母、大写字母、数字、特殊字符(!@#_,.)  -> 强
// 出现小写字母、大写字母、数字  -> 中
// 出现小写字母、大写字母  -> 轻
// 其他  -> 不满足要求
// (?=.*[a-z])  => 检查是否有小写字母
// (?=.*[A-Z]) => 检查是否有大写字母
// (?=.*[!@#_,.]) => 检查是否包含特殊字符
function judgePwd(pwd) {
  if (/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#_,.]).{6,12}$/.test(pwd)) {
    return "强";
  } else if (/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{6,12}$/.test(pwd)) {
    return "中";
  } else if (/^(?=.*[a-z])(?=.*[A-Z]).{6,12}$/.test(pwd)) {
    return "轻";
  } else {
    return "不满足要求";
  }
}
console.log(judgePwd("asdADFF4.343"));
// 输出强

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值