-
什么是正则
规则表达式 我们来书写一段规则, 用于匹配一段字符串是否符合规则 创建的时候 1. 字面量的形式 2. 内置构造函数
// 1. 字面量的形式
const reg = /abc/
// 2. 内置构造函数
const reg1 = new RegExp('abc')
console.log(reg)
console.log(reg1)
-
正则的常用方法
1. 匹配 test 匹配字符串是否符合正则规则 符合 --- true 不符合 --- false 语法 正则.test(字符串)
const reg = /abc/ // 要求字符串中 包含 abc
const str = 'qwertyui'
const str1 = 'qwertyuiabc'
console.log(reg.test(str)) // false
console.log(reg.test(str1)) // true
console.log(reg.test('1234567890')) // false
-
正则的元字符
正则表达式的符号由那些组成? 1. 元字符 正则表达式的规则符号 2. 修饰符 修饰整个正则表达式的符号 元字符 - 普通元字符 1. \d 表示 一位(一个) 数字(0~9) 2. \D 表示 一位 非数字(除了0~9) 3. \w 表示 数字(0~9)字母(a-zA-Z)下划线(_) 其中的 一个 4. \W 表示 除了 数字(0~9)字母(a-zA-Z)下划线(_) 这些的 某一个字符 5. \s 表示 一位 空白字符 6. \S 表示 一位 非空白字符 7. . 表示 一位 非换行的任意字符 8. \ 表示转义符 把有意义的符号, 转为 没有意义的文本 将没有意义的文本, 转为 有意义的符号 -
正则的边界元字符
1. ^ 表示开头 2. $ 表示结尾
const reg1 = /\d/ //表示字符串至少出现一个数字
console.log(reg1.test('abc123def'))
const reg2 = /^\d/ //表示字符串开头是一个数字
console.log(reg2.test('1def'))
const reg3 = /\d$/ //表示字符串的结尾是一个数字
console.log(reg3.test('abc3'))
const reg4 = /^\d$/ //表示字符串只能是一个数字
console.log(reg4.test('abc123def'))
console.log(reg4.test('123abc'))
console.log(reg4.test('123'))
console.log(reg4.test('1')) //只能 是一个数字
-
正则的 限定元字符
表示 前边一个 符号 出现多少次 1. * 表示 0~正无穷次 2. + 表示 1~正无穷次 3. ? 表示 0~1次 4. {n} 表示 限定 n 次, 不能多也不能少 5. {n,} 表示 最少 n 次 6. {n,m} 表示 最少 n 次, 最多 m 次
const reg1 = /^\d*$/ // 这个字符串的数字只能出现 0~正无穷次
console.log(reg1.test('1')) // true
console.log(reg1.test('1a')) // false
const reg2 = /^\d+$/ // 这个字符串的数字只能出现1~正无穷
console.log(reg2.test('100')) // true
console.log(reg2.test('qwer')) // false
console.log(reg2.test('999qwer')) // false
const reg3 = /^\d?$/ // 这个字符串的数字只能出现 0~1 次
console.log(reg3.test('666')) // false
console.log(reg3.test('6')) // true
const reg4 = /^\d{2}$/ // 这个字符串的数字只能出现 2 次
console.log(reg4.test('666')) // false
console.log(reg4.test('66')) // true
console.log(reg4.test('6')) // false
const reg5 = /^\d{2,}$/ // 这个字符串的数字最少出现 2 次
console.log(reg5.test('666')) // true
console.log(reg5.test('66')) // true
console.log(reg5.test('6')) // false
const reg6 = /^\d{2,3}$/ // 这个字符串的数字最少出现 2 次 最多出现3次
console.log(reg6.test('6666')) // false
console.log(reg6.test('666')) // true
console.log(reg6.test('66')) // true
console.log(reg6.test('6')) // false
-
正则的特殊元字符
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 -
正则的重复元字符
符合:\1 \2......\9 /(abc|def)\1/ 小括号内为abc \1这个位置也需要满足abc 小括号内为def \1这个位置也需要满足def
const reg = /^(abc|def)\1$/ // 小括号内是什么 \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
-
正则的标识符(修饰符)
书写在正则外边 用于描述整个正则表达式 1. i 忽略大小写
const reg = /^[a-c]$/
// console.log(reg.test('a')) // true
// console.log(reg.test('A')) // false
const reg1 = /^[a-c]$/i // 忽略大小写
console.log(reg1.test('a')) // true
console.log(reg1.test('A')) // true
-
正则表达式的捕获
语法: 正则.exec(字符串) 1. 没有捕获到: 直接返回一个 null 2. 捕获到了 2.1 没有小括号也没g 的情况, 永远捕获的都是下标0开始的第一个符合条件的 2.2 没有小括号, 但是有修饰符g 的情况 第一次捕获完成后, 第二次开始的时候, 会从第一次捕获结束的位置开始 第三次开始的时候, 会从第二次捕获结束的位置开始 当所有的匹配项都匹配完成后, 会返回一个 null 当再次捕获的时候, 就从下标0重新开始 2.3 有小括号 下标0 还是我们正常捕获到的内容 从 下标1 开始, 就是每个小括号捕获到的内容 -
正则的两大特性
- 懒惰
正常捕获字符串的时候, 每次都从 下标0开始
解决方式: 给正则添加一个修饰符 g
2. 贪婪 每次在捕获的时候, 会尽可能的多捕获一 些东西 解决: 在原有的修饰符后添加一个 ? 然后相当于 开启 非贪婪模式 贪婪: 能多拿就多拿 非贪婪: 能少拿就少拿 贪婪限定符 * + ? {n,} {n,m} 非贪婪限定符 *? +? ?? {n,}? {n,m}? - 懒惰
-
两种创建正则表达式的区别
// 1. 书写正则修饰符
// const reg = /\w/ig
// const reg1 = new RegExp('abc', 'ig')
// console.log(reg)
// console.log(reg1)
const reg = /\w/ig
// const reg1 = new RegExp('\w', 'ig')
const reg1 = new RegExp('\w', 'ig')
/**
* new RegExp('\w', 'ig')
*
* 会把'\w' 把 w 转化为以一个具有特殊含义的 字符, 所以这一步没有什么意义
*
* 我们如果想要 正则表达式为 \w \w
*/
console.log(reg)
console.log(reg1)