反向断言
检查某个字符后面的字符是否不满足某个规则,该规则不成为匹配结果,并且不成为捕获组
语法:
(?![正则表达式])
// 完美匹配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"));
// 输出强