1.什么是零宽断言:
零宽断言正如它的名字一样,是一种 零宽度的匹配. 它匹配到的内容不会保存到匹配结果中去, 最终匹配结果只是一个 位置 而已.
2.何时使用零宽断言:
在使用正则表示式时, 有时, 我们需要捕获的内容前后必须是特定内容, 但又不捕获这些特定内容的时候, 零宽断言就起到作用了
3.如何使用零宽断言:
零宽断言的作用是 给指定位置添加一个限定条件, 用来规定此位置之前或者之后的字符必须满足限定条件, 才能使正则中的表达式匹配成功.
4.零宽断言分类:
- (?=exp) 也叫 零宽度正预测先行断言,它断言此位置的 后面能匹配 表达式exp
- (?!exp) 也叫 零宽度负预测先行断言,断言此位置的 后面不能匹配 表达式exp
- (?<=exp) 也叫 零宽度正回顾后发断言,它断言此位置的 前面能匹配 表达式exp
- (?<!exp) 也叫 零宽度负回顾后发断言来断言此位置的 前面不能匹配 表达式exp
5.例子: " abCabcab, "
/ab( ?=[A-Z])/
匹配后面跟随任意一个大写字母的字符串”ab”, 最终匹配结果”ab” (大写字母C前的"ab")/ab( ?![A-Z])/
匹配后面不跟随任意一个大写字母的字符串”ab”, 最终匹配结果”ab””ab”(小写字母c前的"ab",和",“前面的"ab”)
6.实际应用: 千分符和密码强度
(1)千分符 :
Var str= ”123456789.12”------> “123,456,789.12”
分析: 从数字的结尾或者从数字的小数点开始,每往前数3位数(n个3位,n>=1)的数字后面, 便应该添加一个 ” , ”
步骤:
- 用零宽断言先找到这些位置:
\d(?=(\d {3})+($|\.))
- 用string提供的replace函数,将正则找到的位置,替换成 \d+” , ”
str=str.replace(/(\d)(?=(\d {3})+($|\.))/g , “$1, “)
注意 :
- 全局查找加g
- 避免与通配符冲突,需要给.加上转义字符.
- 给\d加上( ), 换replace内置的$1 ,便拿到整个正则中第一个圆括号里的内容
(2)密码强度 :
例如: 密码要求:
①要求密码由字母和数字组成 ,不能有特殊字符;
②密码总长度大于等于6位
③至少包含一位数字;
④至少包含一位大写字母;
实现步骤:
- 实现要求①和② :
^[A-Za-z0-9]{6,}$
- 实现要求③: 利用零宽断言取反(不能全部由字母组成):
^(?![a-zA-Z]+$)
注意: $ 需写()里面, 是一种预判 !! - 实现要求④: 利用零宽断言取反(不能全部由小写字母和数字组成):
^(?![a-z0-9]+$)
- 最后将3个分步骤组合起来(注意组合顺序):
var reg=/^(?![a-z0-9]+$)(?![a-zA-Z]+$)[A-Za-z0-9]{6,}$/g;
判断:
请问: 用户设置密码为”Zxxxxxx1” ,判断是否符合要求?Var str=”Zxxxxxx1”
reg.test(str) //true
来源:CSDN
作者:莫清和
链接:https://blog.csdn.net/weixin_46317118/article/details/104580465