正则
1️⃣横向模糊匹配
横向模糊匹配指的是,一个正则可匹配的字符串的长度不是固定的,可以是多种情况。
其实现的方式是使用量词。如{m,n},表示连续出现最少m次,最多n次。
如/ab{2, 5}c/表示匹配这样一个字符串:第一个字符是“a”,接下来是2到5个字符“b”,最后是字符“c”。
图1注意:上面用的正则是/ab{2,5}c/g,后面多了g,它是正则的一个修饰符。表示全局匹配,即在目标字符串中按照顺序找到匹配模式的所有子串,强调的是“所有”,而不只是“第一个”。g是单词global的首字母。
2️⃣纵向模糊匹配
总想模糊匹配指的是,一个正则匹配的字符串,具体到某一位字符时,它可以不是某个确定的字符,可以有多种可能。
其实现的方式是使用字符组。如[abc],表示该字符是可以字符“a”,“b”,“c”中的任何一个。
比如/a[123]b/可以匹配如下三种字符串:“a1b”、“a2b”、“a3b”。如下:
图23️⃣范围表示法
比如[123456abcdefGHIJKLM],可以写成[1-6a-fG-M]。用连字符-来省略和简写。
4️⃣排除字符组
纵向模糊匹配,还有一种情形是,某位字符可以是任何东西,但不能是“a”,“b”,“c”。
此时就是排除字符组(反义字符组)的概念。
如[^abc],表示的是一个除“a”,“b”,“c之外的任意一个字符”。字符组的第一位放^(脱字符),表示求反的概念。
5️⃣常见的简写样式
\d 是[0-9]。表示是一位数字。
\D 是[^0-9]。表示除数字外的任意字符。
\w 是[0-9a-zA-Z_]。 表示数字、大小写字母和下划线。
\W 是[^0-9a-zA-Z_]。非单词字符。
\s 是[ \t\v\n\r\f]。表示空白符,包括空格、水平制表符、垂直制表符、换行符、回车符、换页符。
\S 是[^ \t\v\n\r\f]。非空白符。
. 是[^\n\r\u2028\u2029]。通配符,表示几乎任意字符。换行符、回车符、行分隔符和段分隔符除外。
注:可以使用[\d\D]、[\w\W]、[\s\S]和[^]中任何的一个表示匹配任意字符。
6️⃣量词简写
{m,} 表示至少出现m次。
{m} 等价于 {m, m}, 表示出现m次。
? 等价于{0,1},表示出现或者不出现。
+ 等价于{1,},表示出现至少一次。
* 等价于{0,},表示出现任意次,有可能不出现。
7️⃣多选分支
一个模式可以实现横向和纵向模糊匹配。而多选分支可以支持多个子模式任选其一。
具体形式如下:(p1|p2|p3),其中p1,p2和p3是子模式,用 |(管道符)分隔,表示其中任何之一。
正则表达式位置匹配
^和$
图3\b和\B
\b是单词边界,具体就是\w和\W之间的位置,也包括\w和^之间的位置,也包括\w和$之间的位置。
(?=p)和(?!p)
(?=p),其中p是一个子模式,即p前面的位置。
比如(?=l),表示“l”字符前面的位置。
图4而(?!p)就是(?=p)的反面意思,比如:
案例:
①数字的千分分隔符表示法
图5②验证密码问题
密码长度6-12位,由数字、小写字符和大写字母组成,但必须至少包括2种字符。
var reg = /((?=.*[0-9])(?=.*[a-z])|(?=.*[0-9])(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z]))^[0-9A-Za-z]{6,12}$/;