正则表达式语法

正则表达式

正则表达式介绍

1.正则表达式(Regular expression)是什么 : 对字符串进行逻辑匹配运算的 内置对象
表达式 : 对字符串进行运算
2.正则表达式作用 : 字符串格式校验
* 对字符串进行逻辑匹配运算
3.正则表达式使用流程 :
(1)创建正则对象 : let reg = new RegExp(‘正则’)
(2)调用正则对象的test方法: reg.test(‘需要校验的字符串’)
true : 校验通过
false : 校验不通过

//正则: 检测字符串有没有a
let reg = new RegExp('a')
console.log( reg.test('abc123') )//true
console.log( reg.test('bc123') )//false

(1)js中几乎所有的内置对象,都是通过new来创建的
new Date()
new RegExp()
new Array()
new Object()
(2)js中有三种内置对象有简写语法
数组: []
对象: {}
正则: /正则/

console.log( /a/.test('sfsfsfs') )//false

正则表达式语法由两部分组成

1.原义文本字符 : 字符串本身的含义
/abc/ : 检测字符串中有没有 abc
* PS : 别多想,写什么就是什么。想的越多,错的越离谱
2.元字符 : 改变了字符串本身的含义, 类似于js中的关键字
[] {} () . \ + ? * ^ $ |

//   /黑马/ : 检测字符串中有没有黑马 。 
// 不是有黑 或 有 马,也不是有黑,且有马。 就是检测有没有黑马
console.log( /黑马/.test('我喜欢黑色') )//false
console.log( /黑马/.test('一匹黑色的马') )//false
console.log( /黑马/.test('黑马程序员') )//true   

[] : 字符类

/abc/ : 原义文本字符。 检测字符串有没有 abc
/[abc]/ : 字符类。 将a 或 b 或 c归为一类,满足任意一个即可.
说人话: 检测字符串中有没有 a 或 b 或 c
/[^abc]/ : 反向类。 将不是a 或 不是b 或 不是c的归为一类,满足任意一个即可。
说人话: 检测字符串中有没有除 abc之外的任意字符

// /[abc]/   : 检测字符串中有没有 a 或 b 或 c
console.log(/[abc]/.test('a1b2c3'))//true 
console.log(/[abc]/.test('abc123'))//true
console.log(/[abc]/.test('a123456'))//true
console.log(/[abc]/.test('123456'))//false
console.log(/[abc]/.test('abcabc'))//true 
// /[^abc]/   : 检测字符串中有 不是 a或b或c的字符
console.log(/[^abc]/.test('a1b2c3'))//true
console.log(/[^abc]/.test('abc123'))//true
console.log(/[^abc]/.test('a123456'))//true
console.log(/[^abc]/.test('123456'))//true
console.log(/[^abc]/.test('abcabc'))//false

范围类

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] : 报错

console.log( /[0-9]/.test('abc123') )//true
console.log( /[a-z]/.test('abc123') )//true
console.log( /[A-Z]/.test('abc123') )//false

预定义类

预定义类: 正则表达式提供好的用来匹配常见的字符类

预定义类等价类含义单词
.[^\r\n]除了回车和换行之外的所有字符
\d[0-9]数字字符digit数字
\D[^0-9]非数字字符
\s[\f\n\r\t\v]空白字符 \n:new line换行 \t:tab 一般是4个空格space 空格
\S[^\f\n\r\t\v]非空白字符
\w[a-zA-Z_0-9]单词字符(字母、下划线、数字)word
\W[^a-zA-Z_0-9]非单词字符

边界

原义文本字符: /abc/ 检测字符串abc
字符类 : /[abc]/ 检测a或b或c任意字符
反向类 : /[^abc]/ 检测不是 a或b或c任意字符
边界 : /^abc/ 在正则中,有时候一个元字符可能有两种含义(类似于js的+)
正则是一个一个字符检查

1.开头边界: /^abc/

正确含义: 检测 以a开头 + bc的字符串 (^只对a检测)
先检测第一个字母是不是a,是的就检测第二个字母是不是b,是的就检测第三个字母是不是c,是的就true
错误含义: 检测 以abc开头的字符串 (^把abc当做整体)

console.log(/^abc/.test('a1b2c3')) //false
console.log(/^abc/.test('abc123')) //true
console.log(/^abc/.test('abcabc')) //true
console.log(/^abc/.test('123abc')) //false
2.结尾边界: /abc$/

正确含义 : ab + 以c结尾的字符串 ($只对c检测)

一个一个字符检测,检测到了a,就检测a后面是不是b,是的就检测b后面是不是c,是的就看这个c是不是结尾,是的就是true
错误含义: 以abc结尾 ($把abc当做整体)

console.log(/abc$/.test('a1b2c3')) //false
console.log(/abc$/.test('abc123')) //false
console.log(/abc$/.test('abcabc')) //true
console.log(/abc$/.test('123abc')) //true
3.严格匹配: 开头边界与结尾边界同时使用/^abc$/ !!!

/^abc$/ : 只有唯一答案 ,就是abc本身
正确含义 : 以a开头 + b + 以c结尾 (^检测a开头, $检测c结尾)
检测第一个字母是不是a,是的就检测这个a后面是不是b,是的就检测这个b后面是不是c,是的就检测这个c是不是结尾,是的就是true
错误含义 : 以abc开头,以abc结尾

console.log(/^abc$/.test('a1b2c3')) //false
console.log(/^abc$/.test('abc123')) //false
console.log(/^abc$/.test('abcabc')) //false
console.log(/^abc$/.test('123abc')) //false
console.log(/^abc$/.test('abc')) //true 
4. /^\d{11}$/:11个数字,且已数字开头,数字结尾
//用于判断是否输入的是电话号码
console.log(/^\d{11}$/.test('advdv12345678910xxbsb')) //false
console.log(/^\d{11}$/.test('12345678910')) //true
console.log(/^\d$/.test('111')) //false
5.量词

量词作用: 检测字符出现的次数
常用于检测手机号,验证码,账号,密码

量词含义
?出现零次或一次(最多出现一次 <=1)
+出现一次或多次(至少出现一次 >=1)
*出现零次或多次(任意次)
{n}出现n次
{n,m}出现n-m次
{n,}出现至少n次(>=n)
//   /\d?/  : 匹配 零次或一次(最多出现一次 <=1)
console.log('1234567890abc'.replace(/\d?/, 'X')) // X234567890abc
console.log('a1234567890abc'.replace(/\d?/, 'X')) // Xa1234567890abc
//   /\d+/  : 匹配 出现一次或多次(至少出现一次 >=1)
console.log('1234567890abc'.replace(/\d+/, 'X')) // Xabc
console.log('a1234567890abc'.replace(/\d+/, 'X')) // aXabc
//   /\d*/  : 匹配 出现零次或多次(任意次)
console.log('1234567890abc'.replace(/\d*/, 'X')) // Xabc
console.log('a1234567890abc'.replace(/\d*/, 'X')) // Xa1234567890abc
//  /\d{5}/ : 匹配5次
console.log('1234567890abc'.replace(/\d{5}/, 'X')) // X67890abc
//  /\d{5,8}/ : 匹配5-8次
console.log('1234567890abc'.replace(/\d{5,8}/, 'X')) // X90abc
//  /\d{5,}/ : 匹配>=5次
console.log('1234567890abc'.replace(/\d{5,}/, 'X')) // Xabc
console.log('1234abc'.replace(/\d{5,}/, 'X')) // 1234abc

在这里插入图片描述
在这里插入图片描述
+无法匹配0次,*可以匹配0次

6.分组

() 在正则中有两种含义
1.分组 : 把多个字符归为一组,用于量词
2.提升优先级 : 让 | 只匹配小括号内部的字符,提升|的优先级

1.分组 : 把多个字符归为一组,用于量词
需求:检测 三次 love
/love{3}/ : 检测 lov + e出现3次
/(love){3}/ : 检测 (love) 出现三次

console.log( /love{3}/.test('lovelovelove'))//false
console.log( /love{3}/.test('loveeee'))//true
console.log( /(love){3}/.test('lovelovelove'))//true
console.log( /(love){3}/.test('loveeee'))//false

2.提升优先级 : 用于 |
需求: 检测 love 或 live
/lo|ive/ : 检测 lo 或 ive
/l(o|i)ve/ : 检测 l + o或i + ve

console.log( /lo|ive/.test('lo123'))//true
console.log( /lo|ive/.test('ive123'))//true
console.log( /lo|ive/.test('love123'))//true
console.log( /lo|ive/.test('live123'))//true
console.log( /l(o|i)ve/.test('lo123'))//false
console.log( /l(o|i)ve/.test('ive123'))//false
console.log( /l(o|i)ve/.test('love123'))//true
console.log( /l(o|i)ve/.test('live123'))//true
7.修饰符

1.修饰符 : 对正则表达式起到修饰的作用
g : global,全局匹配
i : intensity, 不区分大小写
2.修饰符语法: /正则表达式/修饰符
* new RegExp(‘正则’,‘修饰符’)

//1. g : 全局匹配
//(1)默认情况下,正则只能匹配第一个字符
console.log( '123a456A789aaaAAA'.replace(/a/,'X') )//123X456A789aaaAAA
//(2)  g : 全局匹配, 正则匹配所有字符
console.log( '123a456A789aaaAAA'.replace(/a/g,'X') )//123X456A789XXXAAA
//2. i : 不区分大小写
//(1)默认情况下,正则区分大小写
console.log( 'A123a456A789aaaAAA'.replace(/a/,'X') )//A123X456A789aaaAAA
//(2) i : 不区分大小写
console.log( 'A123a456A789aaaAAA'.replace(/a/i,'X') )//X123a456A789aaaAAA
//修饰符可以连写
//  ig : 全局匹配 + 不区分大小写
console.log( 'A123a456A789aaaAAA'.replace(/a/ig,'X') )//X123X456A789XXXXXX
8.常用正则表达式总结

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+)?$/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值