正则小知识-断言

文章介绍了正向断言和反向断言在正则表达式中的使用,通过示例展示了如何利用它们进行复杂文本匹配,如检查字符序列、数字格式转换和密码强度验证。正向断言用于检查某个字符后面是否满足特定规则,而反向断言则检查是否不满足规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

反向断言

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

语法:

(?![正则表达式])
// 完美匹配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"));
// 输出强

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值