匹配位置(锚点) ^ $ \b \B (?=p) (?!p)
六个锚字符,下面一一介绍 一. ^号 开始符,即匹配字符串的开头
"(T|t)he" => The car is parked in the garage.
"^(T|t)he" => The car is parked in the garage.
上面这个例子可以看到这个^的作用 二. $号 结束符,即匹配字符串的末尾
"(at\.)" => The fat cat. sat. on the mat."(at\.)$" => The fat cat. sat. on the mat.上面这个例子可以看到这个$的作用 三. \b和\B \b是单词边界(是位于\w和\W)
回忆一下 \w是匹配所有的字母和数字[a-zA-Z0-9_],\W是匹配所有的非字母数字,那么\b就是交界处
如图所示,空白符和开头是 \W ,字母是 \w ,紫色线就是 \b
\B是非单词交界(就是字母间的间隙,空格不算!!!)
如图,单词间的间隙画上的紫色线就是 \B 四. (?=p)和(?!p)系列 先行断言和后发断言都属于非捕获簇(不捕获文本 ,也不针对组合计进行计数)。 先行断言用于判断所匹配的格式是否在另一个确定的格式之前,匹配结果不包含该确定格式(仅作为约束) 带着仅作为约束这句话,我们看看以下内容
(?=p)给的约束是p字符前面的位置
比如(?=l),表示'l'字符前面的位置
var result = "hello".replace(/(?=l)/g, '#');
console.log(result);
// => "he#l#lo"
而(?!p)就是(?=p)的反面意思,也即不是p前面的位置
var result = "hello".replace(/(?!l)/g, '#');
console.log(result);
// => "#h#ell#o#"
这个系列的操作还有如下两个
(?<=p) (?<!p)
(?<=p)的约束是对p的后面生效
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
分析上面这个例子,(?<=(T|t)he\s)说的是约束到(T|t)he\s后面的位置,(T|t)he\s是啥,就是the+空格,或者The+空格,相当于例子中约束位置到fat前面和mat前面。
(?<!p)意思相反,不多赘述 五. 案例 1. 怎么做千位分隔符 一开始我的想法是每隔三位找到间隙,/(?=(\d{3})+$)/gm,但是很明显有个致命的问题,就是开头的‘^’符号也被计入了,自己想想要怎么做呢?
其实解决方法就是找差别,后面的逗号夹在两个数字之间,前面的逗号夹在开始符号和首数字间,于是改进:/(?=\B(\d{3})+$)/gm
当然这里分割符都是回车,其他情况就靠大家自己去想了
这里给大家再做一个分隔符是空格的,其他大家自己灵活变通! 2.表单验证之一------密码验证 重磅重磅!!!!!最最最常用到的地方 Tip1 6-12位,不允许特殊字符
var reg = /^[0-9A-Za-z]{6,12}$/;
Tip2 同时包含两种字符
var reg = /(?=.*[0-9])(?=.*[a-z])/;
大致意思就是跟着的字符必须有数字or字符
由于不止小写和数字,还有大写字母,通过分类讨论和整合,得到最终答案是:
var reg = /((?=.*[0-9])(?=.*[a-z])|(?=.*[0-9])(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z]))^[0-9A-Za-z]{6,12}$/;
至此,基础的语法你已经懂了,试着自己写写邮箱的验证? 六. 模式修正符