从零基础学习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+
这个就表示 匹配以“任意字符连着一个小写字母”开头的数字,只匹配数字。