正则

2019-04-02  本文已影响0人  布丁点com

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”。如下:

图2

3️⃣范围表示法

比如[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}$/;

上一篇下一篇

猜你喜欢

热点阅读