正则表达式
PPT 在线查看(可下载):https://www.yuque.com/heq286/xakx9r/10490826
视频回放地址:https://www.bilibili.com/video/BV1Ft4y1B768/
以下内容为基本语法,详细请见 PPT
1 界定符
定义:表示一个正则表达式的开始和结束
在 JavaScript 中,界定符以斜线(/
)开始和结束:
1 | const reg = /正则表达式/; |
可以这样理解:字符串是通过单引号或者双引号界定,那么正则的界定就好理解了吧。
2 原子
定义:正则表达式中最小的匹配单位
分为:可见原子、不可见原子(空格、换行符等)
1 | const reg = /A/; |
以上正则表达式中,均只有一个原子。
可以这样理解:一篇文章的最小单位是一个文字或者一个单词,他们组合在一起就是一篇文章,正则表达式也是有原子组合而来的。
3 元字符
定义:一系列原子的集合
作用:定义原子的筛选方式;对某一类原子归类缩写;
有三种筛选方式:
1 | 原子|原子 // 表示:或(匹配其中一个原子即可) |
中括号中,如果原子是连续的(ASCII 码),那么可以用横线(-
)表示连续:
1 | [0123456789] = [0-9] |
内置原子集合:
元字符 | 解释 | 等价于 |
---|---|---|
. | 除换行符之外任意一个字符 | |
\d | 匹配任意一个十进制数 | [0-9] |
\D | 匹配任意一个非十进制数 | [^0-9] |
\s | 匹配一个不可见原子 | [\f\n\r\t\v] |
\S | 匹配一个可见原子 | [^\f\n\r\t\v] |
\w | 匹配任意一个数字、字母、下划线 | [0-9a-zA-Z_] |
\W | 匹配任意一个非数字、字母、下划线 | [^0-9a-za-z_] |
可以这样理解:单词可以组成一句话,文章是由很多句话组成。元字符也是对一类原子组成的一小段,最终这些元字符汇聚就可以组成正则表达式。
4 量词
定义:描述原子连续出现的次数
用法:
1 | 原子{n} // 表示要前面紧邻的这个原子要匹配n次 |
特殊量词:
特殊量词 | 解释 | 等价于 |
---|---|---|
* | 匹配>=0 次之前的原子(可存在) | {0,} |
+ | 匹配 1 次或多次之前的原子(存在) | {1,} |
? | 匹配 0 次或 1 次之前的原子(可有可无) | {0,1} |
示例:
1 | /ES\d{4}/ // 可以匹配到:ES000 ES2015 ES2020等 |
5 边界控制
定义:对目标位置的控制,以^
表示开始,以$
表示结束。
用法:
1 | /go{2,}gle/ // "This is google website!" 可以匹配 |
此外边界控制还有模式单元()
,小括号的作用可以将整体作为一个原子。
1 | [Dd]( |
6 修正模式
定义:给正则表达式的匹配过程设定一种模式
修正表达式 | 解释 |
---|---|
i | 忽略字母大小写 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
m | 执行多行匹配。 |
用法:
1 | /正则表达式/i; |
7 贪婪模式和懒惰模式
定义:
贪婪模式:在条件允许的范围内,利益最大化(得寸进尺)
懒惰模式:达到最低标准即可(不思进取)
用法:量词后面加?
表示懒惰模式
1 | tasssssk /s+/ 匹配结果:sssss (贪婪模式,可以匹配1个以上的s,那就全匹配) |
贪婪模式 | 懒惰模式 | 解释 |
---|---|---|
? | ?? | 匹配 0 个或 1 个 |
+ | +? | 匹配 1 个或多个 |
* | *? | 匹配 0 个或多个 |
{n} | {n}? | 匹配 n 个 |
{n,m} | {n,m}? | 匹配 n 个或者 m 个 |
{n,} | {n,}? | 匹配 n 个或者多个 |
8 神奇的问号?
正向断言:(?=原子)
表示后面必须接正向断言的原子,且匹配结果不包括该原子
负向断言:(?!原子)
表示后面不能接正向断言的原子,匹配结果不包括该原子
1 | /string(?=s)/ 可以匹配:strings (匹配结果:stirng) 不可以匹配:stringS stringa |
?:
产生无编号分组:
1 | 正则:/(ab)c(ba)/ /(?:ab)c(ba)/ /((a)(b))(c)/ |