正则
规则表达式
写一段规则,用来匹配一段字符串是否符合规则
创建规则表达式
1、字面量形式
const reg = /\w/ig
2、内置构造函数
const reg1 = new RegExp('\w','ig')
- 区别:
1、在书写标识符时
字面量:写在正则后面
内置构造函数:写在括号里面,和正则用(,)分隔
2、 RegExp('\w','ig')
会把‘\w’ w转化为一个具有特殊含义的字符
需要将‘\w’ 改为'\w' 才为正则表达式
正则的常用方法
1、匹配:匹配字符串是否符合正则规则
test
符合:true
不符合:false
语法:正则.test(字符串)
2、捕获:正则表达式的捕获
语法:正则.exec(字符串)
1、没有捕获到:直接返回一个null
// const reg = /\d{3}/
// console.log(reg.exec('zxcvbnm')) // null
2、捕获到了:
-
2.1没有小括号也没g的情况,永远捕获的都是下标0开始的第一个符合条件的
没有小括号, 也没有 g
const reg = /\d{3}/
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
-
2.2 没有小括号,但是有修饰符g的情况
第一次捕获完成后,第二次从上一次捕获结束位开始捕获
当所有的匹配项完成后,会返回一个null
当再次捕获时又从头开始捕获。
有修饰符 g
const reg = /\d{3}/g
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
console.log(reg.exec('z123xc456vb789nm000'))
-
2.3 有小括号的时候,
下标0还是我们正常捕获的内容
从下标1开始,就是每个小括号捕获到的内容。
const reg = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/
const str = '411371200411081234'
console.log(reg.exec(str))
const reg1 = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}|\dx)/
const str1 = '41137120041108123x'
console.log(reg1.exec(str1))
正则的元字符
正则表达式的符号有什么组成?
1、元字符:正则表达式的规则符号
2、修饰符:修饰整个正则表达式的符号
1、元字符-普通元字符
1、\d 表示 一位数字(0~9)
2、\D 表示一位非数字(除了0~9)
3、\w 表示一位字母数字下划线(_),其中的一个
4、\W 表示除了字母数字下划线之外的其中一个字符
5、\s 表示一位空白字符
6、\S 表示一位非空白字符
7、. 表示一位非换行(\n)的任意字符
8、\ 表示转移符
有意义字符
无意义文本
2、正则的边界字符
1、^ 表示开头
2、$ 表示结尾
/^\d$/ // 表示字符串只能是一个数字
3、正则的限定符(表示前边一个符号出现多少次)
1、* 表示 0~正无穷次
2、+ 表示 1~正无穷次
3、? 表示 0~1次
4、{n} 表示只能是n次
5、{n,} 表示最少n次
6、{n,m} 表示n~m次
4、正则的特殊元字符
1、()
含义1:当成一个整体
含义2:单独捕获
2、| 或
字符为 | 两边的都行
分界线:小括号或者正则的边界(开头和结尾)
3、 [] 包含
注意:[abcd] 包含其中一个即可 []实际代表的是以为字符
4、[^] 非
注意:[^abcd] 只要不是他们四个中 一个(一位字符) 即可
5、- 到(至)
通常与 (包含 非) 一起使用
[0-9] 数字 0~9 中的一个 \d
[^0-9] 不是数字 0~9 中的 一个 \D
[a-z] 小写 字母a~z
[A-Z] 大写 字母A~Z
5、重复元字符
符号:\1 \2 \3 ... \9(代表第几个括号的值)
/(abc|def)\1/
小括号内为abc \1 也要为abc
小括号内为def \1 也要为def
6、正则的标识符(修饰符)
书写在正则外面,用于描述整个正则表达式的
1、i (忽略大小写)
2、g (全局)
7、正则的两大特性
1、懒惰
正常捕获字符串的时候 每次都从下标0开始
解决方式:给正则添加一个修饰符 g
2、贪婪
每次捕获的时候,尽可能多的捕获一些东西
解决方式:给原来的修饰符后添加一个 ? 然后相当于开启了非贪婪模式
贪婪模式:能多拿就多拿 限定符:(* + ?{n} {n,m})
非贪婪:能少那就少拿 (*? +? {n,}? {n,m}?)