RegExp - 正则表达式 (Regular Expression)
+ 也叫 "规则表达式"
+ 是一个复杂数据类型
+ 作用:
1. 专门用来验证字符串是否符合规则
2. 从字符串里面获取一部分符合规则的内容
+ 语法:
=> 使用一些特定的符号, 来组合成一个表达式
=> 使用这个表达式去验证字符串, 或者从字符串里面获取一些内容

创建一个正则表达式
1. 字面量形式创建
+ var reg = /abcd/
2. 内置构造函数创建
+ var res = new RegExp('abcd')
=> 意义: 字符串里面包含一段 abcd 字母就可以
-> 检测: aaabbbcccddd 不合格
-> 检测: aaabcddddd 合格

正则表达式的两个方法
1. 匹配: 验证字符串是不是符合正则规则
=> 语法: 正则.test(你要检测的字符串)
=> 返回值: 一个布尔值, true 或者 false
2. 捕获: 从字符串里面获取符合正则规则的那一部分片段
=> 语法: 正则.exec(你要捕获的字符串)
=> 返回值:
1. 字符串里面没有符合规则的片段
-> null
2. 字符串里面有符合规则的片段
2-1. 基础捕获
-> 返回值是一个数组
-> [0] 是捕获出来的片段
-> 不管有多少个片段, 都只是捕获第一个片段
-> 不管捕获多少次, 都是第一个片段
2-2. 当正则表达式有 () 的时候
-> 返回值是一个数组
-> 从 索引[1] 开始依次是每一个小括号的单独捕获
2-3. 当正则有全局标识符 g 的时候
-> 第二次捕获会从第一次捕获的结束为开始继续向后查找
-> 直到找不到了位置, 返回 null
-> 再后面一次捕获, 依旧会从 [0] 位置开始查找

正则表达式的元字符 - 基础元字符
+ 元字符: 组成正则的基本符号
=> 以符号的形式来代替文本内容
=> 把所有的文本内容归结成一些符号来代替

1. \s 表示一个空格
2. \S 表示一个非空格
3. \t 表示一个制表符(tab)
=> 一个制表符就是制表符, 不是多个空格
4. \d 表示一个数字
5. \D 表示一个非数字
6. \w 表示一个 数字字母下划线
=> 表示 数字 字母 下划线 三选一 得有一个
7. \W 表示一个 非数字字母下划线
=> 表示 数字 字母 下划线 以外的任意一个都行
8. 点(.) 表示非换行的任意字符
9. 斜线(\) 表示转义符
=> 把没有意义的内容转换成有意义的内容
=> 把有意义的内容转换成没有意义的内容

正则表达式的元字符 - 边界元字符

1. ^ 表示字符串开始
2. $ 表示字符串结束

正则表达式的元字符 - 限定元字符
+ 写在普通元字符或者字母符号的后面
+ 修饰前面 **一个符号** 的出现次数

1. * 表示出现 0 ~ 多次
2. + 表示出现 1 ~ 多次
3. ? 表示出现 0 ~ 1 次
4. {n} 表示出现 n 次
5. {n,} 表示出现 n ~ 多次
=> {0,} 等价于 *
=> {1,} 等价于 +
6. {n,m} 表示出现 n ~ m 次
=> {0,1} 等价于 ?

正则的贪婪和非贪婪

贪婪
+ 当你给一个符号使用限定符的时候
+ 在你捕获的时候, 他会尽可能多的去捕获内容
+ 我们管这个特性叫做正则的贪婪性

非贪婪
+ 正则在捕获的时候尽可能的按照最小值来捕获
+ 写限定符的时候, 在后面多家一个 ?

正则表达式的元字符 - 特殊字符

1. ()
1-1. 一个整体
1-2. 单独捕获
=> 在你捕获一个字符串的时候
=> 从左边开始每一个小括号依次是数组里面的 [1] 开始的内容
=> 从左到右依次数小括号的开始括号
2. (?:)
=> 整体匹配但不捕获
=> 只是标志一个整体, 但是捕获的时候不会单独捕获出来
3. |
=> 占位或
=> 表示左边或者右边的都行
=> 大部分时候和 () 连用, 表示一个整体或者一个整体
=> 注意: 或分开的是左边和右边整个
4. []
=> 注意: **一个 [] 占一个字符位置**
=> 表示里面的任意一个都行
5. [^]
=> 注意: **一个 [^] 占一个字符位置**
=> 表示非里面的任意一个都行
6. -
=> 表示 至 或者 到
=> 是使用在 [] 里面的一个符号
=> 表示 从 哪一个字符 到 哪一个字符
=> 前提是他们在 ASCII 码是连着的

组合形式
1. [0-9a-zA-Z_] 等价于 \w
2. [^0-9a-zA-Z_] 等价于 \W
3. [0-9] 等价于 \d
4. [^0-9] 等价于 \D
5. [ ] 等价于 \s
6. [^ ] 等价于 \S

特殊说明
=> 当 点(.) 出现在 [] 或者 [^] 里面的时候
=> 表示一个 点 文本

正则表达式的预查
+ 正向预查
=> 正向肯定预查
-> 当我在捕获一个内容的时候, 后面必须跟着是我选择的某一个才可以
-> (?=)
=> 正向否定预查
-> 当我在捕获一个内容的时候, 后面必须跟着不是我选择的某一个才可以
-> (?!)
+ 负向预查
=> 负向肯定预查
-> 当我在捕获一个内容的时候, 前面必须是我选择的某一个才可以
-> (?<=)
=> 负向否定预查
-> 当我在捕获一个内容的时候, 前面必须不是我选择的某一个才可以
-> (?<!)

重复出现

1. \num
=> num 是一个正整数
=> \1 \2 \3 ...
=> num 是一个数字, 表示的是正则第 num 个可被捕获的 ()
-> 这个可被捕获的小括号位置是什么 出现 一份 一摸一样的内容

正则表达式的标识符
+ 标识符是写在正则表达式的外面, 用来修饰整个正则表达式的
+ 标识符
1. i 忽略大小写
2. g 全局
3. y 粘性全局
+ 语法:
=> /abcd/igy
=> new RegExp('abcd', 'igy')

两种创建正则表达式的区别
1. 字面量创建
+ 语法: var reg = /abcd/igy
+ 不能进行字符串拼接
+ 书写基础元字符的时候直接写 \xx
2. 内置构造函数创建
+ 语法: var reg = new RegExp('abcd', 'igy')
+ 可以进行字符串拼接
+ 书写基础元字符的时候要书写 \\xx

字符串和正则合作的方法
+ 这些方法都是字符串的常用方法, 只不过参数位置可以写正则

1. search()
+ 语法:
1. 字符串.search(字符串片段)
2. 字符串.search(正则表达式)
+ 返回值:
=> 如果有就是对应的索引
=> 如果没有就是 -1

2. replace()
+ 语法:
1. 字符串.replace(字符串片段, 要替换的内容)
2. 字符串.replace(正则表达式, 要替换的内容)
+ 返回值:
1. 只能替换第一个查找到的内容, 返回替换好的字符串
2. 没有全局标识符 g 的时候, 只能替换第一个查找到的内容, 返回替换好的字符串
有全局标识符 g 的时候, 会把字符串内所有满足正则规则的内容全部替换, 返回替换好的字符串

3. match()
+ 语法:
1. 字符串.match(字符串片段)
2. 字符串.match(正则表达式)
+ 返回值:
1. 查找到字符串内一个满足字符串片段的内容返回, 返回格式和 exec 一模一样
2. 当正则表达式没有全局标识符 g 的时候, 返回值和 exec 方法一模一样
当正则表达式有全局标识符 g 的时候, 返回一个数组, 里面是所有满足条件的内容

补: 正则匹配中文
+ 再正则表达式里面 \u 表示查找中文
+ 后面带上中文的 四位 unicode 编码
+ [\u4e00-\u9fa5] 表示任意一个中文字符

posted on 2021-09-15 09:36  phantom_yy  阅读(55)  评论(0)    收藏  举报