正则
1 定义:自己写了一个规则,用于匹配一段字符串是否符合规则
2 创建
a. 字面量的形式
const reg(自定义) = /abc/ 打印/abc/
b. 内置构造函数
const reg1 = new RegExp('abc') 打印/abc/
3 正则的常用方法
-
3.1 匹配(test) 匹配字符串是否符合字正则规则 符合:true 不符合:false -
3.2 捕获 a. 语法:正则.exec(字符串) b. 没有捕获到 直接返回一个null c. 捕获到了 没有小括号也没有g的情况,永远只捕获满足条件的第一个 没有小括号,但是有g的情况,每次都捕获到一个,全部捕获完以后,没有以后,在捕获一次会返回null后面又重新开始循环 有小括号的情况,下标0是我们正常捕获到的内容,从下标1开始,就是每个小括号捕获到的内容 例子: const reg = /(\d{4})(\d{4})(\d{4})(\d{4})/ const str = '522252004111023' console.log(reg.exec(str))
4 正则的元字符
正则表达式由那些组成 元字符(规则运算符)+修饰符(修饰整个正则表达式的符合)
元字符 - 普通元字符
\d 表示一位数字(范围:0-9)
\D 表示一位非数字(除了0-9)
\w 表示数字(0-9)字母(a-z A-Z)下划线(_)的某一个字符
\W 表示除了\w以外的某一个字符
\s 表示一位空白字符
\S 表示一位非空白字符
. 表示非换行的任意字符
\ 表示把有意义的符号转换为没有意义的文本 两者相互转换
5 正则的边界元字符
5.1 ^ 表示开头
5.2 $ 表示结尾
6 正则的限定元字符
表示前面一个符号出现多少次
* 表示0~正无穷次
+ 表示1~正无穷次
? 表示0~1次
{n} 表示限定n次,要刚刚好
{n,} 表示最少n次
{n,m} 表示最少n次,最多m次
7 正则的特殊元字符
-
() 表示当一个整体 / 单独捕获
-
| 或
-
[] 包含 [abc] 包含其中一项
-
[^] 非 [^abc] 只要不是其中一位即可
-
横杠(-) 到(至) 通常和包含和非一起使用
现学现用 : 问题: 或(|) 的分界线在哪里? const reg = /^abc|def$/ 分界线:在| const reg1 = /^ab(c|d)ef$/ 分界线:是正则的边界 总结: 或的分界线是小括号或者是正则的边界
8 正则的重复元字符
符号: \1 \2 .....\9
代表第几个小括号的值
注:小括号里面是什么\1的位置就是什么
例子:
const reg = /^(abc|def)\1$/
console.log(reg.test('abcdef')) // false
console.log(reg.test('abcabc')) // true
console.log(reg.test('defabc')) // false
console.log(reg.test('defdef')) // true
9 正则的标识符(修饰符)
书写在正则的外面,用于描述整个正则表达式
i 忽略大小写
g 全局 一项一项的打印
10 正则的两大特性
-
懒惰
正常捕获字符串时每次都从下标0开始解决方法:给正则添加一个修饰g
-
贪婪 每次在捕获的时候,会尽可能多捕获一些东西
解决方法:在原来的修饰符后添加一个? 然后相当于开启非贪婪模式
贪婪:能拿多少就拿多少
非贪婪:能少拿就少拿
贪婪的限定符:* + ? {n,} {n,m}
非贪婪的限定符:*? +? ?? {n,}? {n,m}?
11. 两种创建正则表达的区别
11.1 书写正则修饰符
const reg = /\w/ig
const reg1 = new RegExp ('abc', 'ig')
const reg = /\w/ig
const reg1 = new RegExp('\w', 'ig')
会把'\w' 把 w 转化为以一个具有特殊含义的 字符, 所以这一步没有什么意义
我们如果想要 正则表达式\w \\w
const reg1 = new RegExp('\\w', 'ig')