正则表达式
一.正则表达式介绍
- 正则表达式:是对字符串进行逻辑匹配运算的内置对象
2.正则表达式作用:字符串格式校验
3.正则表达式使用流程:
(1)创建正则对象: let reg = new RegExp('正则')
(2)调用正则对象的test方法: reg.test('需要校验的字符串')
true:校验通过 false:校验不通过
(3)正则的简写
正则 : /正则/
二.正则表达式语法由两部分组成
1.原义文本字符:字符串本身的含义
/abc/ :检测字符串中有没有 abc
2.元字符:改变了字符串本身的含义,类似于js中的关键字
[ ] { } ( ) . \ + ? * ^ $ |
三.字符类
1./[abc]/: 字符类.将a或b或c归为一类,满足任意一个即可.说人话就是检测字符串中有没有 a或b或c
2./[^abc]/:反向类(负向类).将不是a或 不是b 或 不是c的归为一类,满足任意一个即可.说人话就是检测字符串中有没有除abc之外的任意字符
四.范围类
1.范围类
/[0-9]/ : 检测有没有数字
/[a-z]/ : 检测有没有小写字母
/[A-Z]/ : 检测有没有大写字母
2.范围类特点
2.1 范围类是一个闭区间 : /[5-8]/ : 包含5,也包含8
2.2 范围类可以连写: /[0-9a-zA-Z]/ : 大小写字母+数字
2.3 范围类一定是 左边 < 右边 (依据ASCII码)
/[5-8]/ : 正确
/[8-5]/ : 报错
五.预定义类
六.边界(重点)
1.开头边界: /^abc/
正确含义: 检测 以a开头 + bc的字符串 (^只对a检测)
错误含义: 检测 以abc开头的字符串 (^把abc当做整体)
2.结尾边界: /abc$/
正确含义 : ab + 以c结尾的字符串 ($只对c检测)
错误含义: 以abc结尾 ($把abc当做整体)
3.严格匹配: 开头边界与结尾边界同时使用
/^abc$/ : 只有唯一答案 ,就是abc本身
正确含义 : 以a开头 + b + 以c结尾 (^检测a开头, $检测c结尾)
错误含义 : 以abc开头,以abc结尾
七.量词
量词作用: 检测字符出现的次数
? 出现零次或一次(最多出现一次 <=1)
+ 出现一次或多次(至少出现一次 >=1)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n-m次
{n,} 出现至少n次(>=n)
八.分组
() 在正则中有两种含义 1.分组 : 把多个字符归为一组,用于量词
检测字符串中出现三次 love
/love{3}/ :含义 lov + e出现三次
/(love){3}/:含义 (love)出现三次
2.提升优先级 : 让 | 只匹配小括号内部的字符,提升|的优先级
检测字符串中有没有 love或 live
/lo|ive/ 检测 lo 或 ive
/l(o|i)ve/ 检测 l + o或i +ve
九.修饰符 1.修饰符 : 对正则表达式起到修饰的作用
g : global,全局匹配
i : intensity, 不区分大小写
2.修饰符语法: /正则表达式/修饰符
* new RegExp('正则','修饰符')
g : global,全局匹配
(1)/a/:默认情况下,正则只能匹配第一个字符
console.log('a123A456aaAA'.replace(/a/, 'X')) //X123A456aaAA
(2)/a/g:匹配所有a
console.log('a123A456aaAA'.replace(/a/g, 'X')) //X123A456XXAA
i : intensity, 不区分大小写
(1)/A/ :默认情况下,正则区分大小写
console.log('a123A456aaAA'.replace(/A/, 'X')) //a123X456aaAA
(2)/A/i :不区分大小写 a和A 都可以
console.log('a123A456aaAA'.replace(/A/i, 'X')) //X123A456aaAA
修饰符可以同时使用
/a/ig :不区分大小写+全局匹配
console.log('a123A456aaAA'.replace(/A/ig, 'X')) //X123X456XXXX
十.常用正则表达式总结 1.手机号正则
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
2.验证码
/^\d{6}$/
3.账号密码 6-20位: 大小写字母, 下划线_
/^\w{6,20}$/
4.邮箱
/^\w+[@]\w+\.\w+(\.\w+)?$/