从零基础学习js正则匹配

1.正则的基础写法

var reg = /^$/; //=>两个斜杠中间包含一些内容就是正则,两个斜杠之间包含的全部内容都是元字符

2.常用的校验规则

[量词元字符] 
+:让前面的元字符出现一到多次 
?:出现零到一次 
*:出现零到多次 
{n}:出现n次 
{n,}:出现n到多次 
{n,m}:出现n到m次

[特殊意义的元字符] 
:转义字符(把一个普通字符转变为有特殊意义的字符,或者把一个有意义字符转换为普通的字符) 
.:除了(换行符)以外的任意字符 
d:匹配一个0~9之间的数字 
D:匹配任意一个非0~9之间的数字(大写字母和小写字母的组合正好是反向的) 
w:匹配一个 0~9或字母或_ 之间的字符 
s:匹配一个任意空白字符 
:匹配一个边界符 
x|y:匹配x或者y中的一个 
[a-z]:匹配a-z中的任意一个字符 
[^a-z]:和上面的相反,匹配任意一个非a-z的字符 
[xyz]:匹配x或者y或者z中的一个字符 
[^xyz]:匹配除了xyz以外的任意字符 
():正则的小分组,匹配一个小分组(小分组可以理解为大正则中的一个小正则) 
^:以某一个元字符开始 
$:以某一个元字符结束 
?::只匹配不捕获 
?=:正向预查 
?!:负向预查 

3.实例讲解

3.1 测试3位纯数字

let reg = /^\d{3}$/

console.log(reg.test(123))

3.2校验11位手机号

let reg = /^[1]\d{10}$/ //必须是1开头

let reg = /^[1][3|5|7|9]\d{9}$/  //第二位是3或者5或者7

3.3 校验密码

必须是数字与密码 6位到10位数字

let reg = /^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z0-9]{6,10}$/

第一个括号里面标识必须匹配到数字\d

第二个括号表示必须匹配到字母

第三个中括号表示字符集合

.表示匹配除"\n"(换行符)和"\r"(回车符)之外的任何单个字符。

*表示匹配前面的子表达式任意次。例如,zo*能匹配"z",也能匹配“zo”以及“zoo”。*等价于{0,}。

()表示将(和)之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正在表达式中最多可以保存9个),它们可以用\1和\9的符号来引用。

(?=pattern)表示费获取匹配,正向肯定预查,在任何匹配pattern的字符串开始匹配查找字符串,该匹配不需要获取以后使用。例如,“window(?=95|98|XT|2000)”能匹配“window2000”中的“window”,但不能匹配“window3.1”中的“window”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是包含预查的字符之后开始。

这个叫断言,只匹配一个位置
比如,你想匹配一个“人”字,但是你只想匹配中国人的人字,不想匹配法国人的人
就可以用一下表达式
(?=中国)人
所以,楼主的表达式与其他通配符连用才能起到效果。
(?=.*[a-z])\d+
这个就表示 匹配以“任意字符连着一个小写字母”开头的数字,只匹配数字。