一、概念
1. 用于规范字符串的表达式,对字符串的作用有三个
(1)验证字符串是否符合规则
正则.test(字符串) ----- 返回布尔值
(2)将字符串中符合规则的部分提取出来 ----- 返回数组,下标0是我们要的结果
正则.exec(字符串)
字符串.match(正则)
(3)将字符串中符合规则的部分替换掉
字符串.replace(正则, 新的内容) ----- 返回替换后的字符串
二、字面量定义
在js中任意的数据都有两种定义方式
1.字面量
定义方式:
(1)var reg = /具体规则/
(2)var reg = new RegExp() ----- regular expression
2.构造函数方式 - 只能得到对象 - new 函数
js底层处理各种数据的时候,都在使用对象处理
为了方便使用和学习,才会有基本数据类型
三、具体规则
(1)字符:表示字符串组成部分的字符
普通字符 - 匹配字符串中的字符
元字符(特殊符号) - 特殊符号匹配字符串:
1. \d ----- 匹配任意一个数字
2. \w ----- 匹配一个字母或数字或下划线
3. \s ----- 匹配一个空格
4. [] ------ 匹配[]中的任意一个字符
5. . ------- 匹配除换行符以外的任意一个字符
其他的元字符(特殊符号) - 特殊符号匹配字符串(不常用):
1. \b ------ 匹配字符串中边缘(换行和空格)
2. \D ------ 匹配任意一个非数字的字符
3. \W ------ 匹配任意一个不非字母,数字,下划线
4. \S ------ 匹配任意一个非空格字符
(2)字符的修饰符
1. {n} ----- 前面字符必须是n个
2. {n,} ---- 前面的字符最少n个
3. {n,m} -- 前面的字符最少n个,最多m个
4. + ------- 前面的字符最少1个
(3)其他的修饰符
1. ^ ----- 修饰开头 ----- 放在具体规则的最前面,表示这个规则由他后面的字符开头
2. $ ----- 修饰结尾 ----- 放在具体规则的最后面,表示这个规则由他前面的字符结尾
3. | ------ 或者
4. [^] ---- 非
5. \ ------ 转义
6. g ----- 放在斜杠后面 --- 开启全局模式
7. i ------ 忽略大小写
8. [\u4e00-\u9fa5] ----- 匹配任意一个中文汉字
g 是用来表示全局匹配的标志,而不是贪婪模式的标志。标志 g 告诉正则表达式引擎在目标字符串中查找所有满足规则的匹配,而不仅仅是第一个匹配。如果不使用 g 标志,正则表达式通常只会找到第一个匹配项。
贪婪模式是一种匹配策略,是指正则表达式在匹配时倾向于尽可能多地匹配字符。贪婪模式可以通过在量词后面添加一个问号 ? 来禁用,形成非贪婪模式,也称为惰性模式或最小匹配模式。注意:贪婪模式和非贪婪模式仅适用于某些量词,如 +、*、? 和 {}。其他正则表达式元字符(如字符类、分组等)不受贪婪模式的影响。
四、使用
1.验证字符串
(1)reg.test(被验证的字符串)
检测字符串中是否有符合规则的部分 - 返回布尔值
(2)字符串.search(正则表达式)
search方法本质上是在从字符串中查找满足规则部分在字符串中的下标,找到就返回下标,找不到返回-1。
2.提取字符串
(1)正则表达式.exec(字符串)
exec返回数组,数组的第一个元素是满足规则的部分。如果字符串中没有满足规则的,则返回null
(2)字符串.match(正则表达式)
match返回数组,数组的第一个元素是满足规则的部分。如果字符串中没有满足规则的,则返回null
var reg = /[\u4e00-\u9fa5]+/g // 正则表达式的斜杠后面添加g,就开启了贪婪模式
3.替换字符串
(1)字符串.replace(正则表达式,新的部分)
替换字符串只有字符串的replace方法可以实现,replace方法可以将满足规则的部分替换成新的部分
var str = '3/30/2023'
// 转成2023年3月30日
var reg = /(\d+)\/(\d+)\/(\d+)/
str = str.replace(reg, '$3年$1月$2日') /* 给正则中加了()在替换的时候,可以使用$1表示
第一个小括号中匹配到的内容,$2表示第二个小括号中匹配到的内容 */
console.log(str);
五、重点
1.手机号的规则:由1开头,第二位数字:3456789,剩下的9个数字,是任意数字,共11位
var reg = /^1[3-9]\d{9}$/
2.qq邮箱的规则:由1-9开头,剩下的是4-9个任意数字,总长度5~10位,添加@qq.com ------ 转义符在正则规则中同样适用
var reg = /^[1-9]\d{4,9}@qq\.com$/
3.网易邮箱的规则:6~18个字符,由字母开头,数字字母下划线组成 ----- 在正则中或者 通过 | 表示
var reg = /^[a-zA-Z]\w{5,17}@(163|126)\.com$/
4.qq邮箱或网易邮箱
var reg = /(^[1-9]\d{4,9}@qq\.com$)|(^[a-zA-Z]\w{5,17}@(((126|163)\.com)|(yeah\.net))$)/
5.test
6.exec
7.match
8.replace