概述
- 正则表达式包括
普通字符(例如 a 到 z 、0 到 9、标点符号等的所有非元字符)和特殊字符(元字符) - 正则表达式
描述、匹配一系列符合某个句法规则的字符/字符串 - 加转义符号
\把元字符变为普通字符
例如:
今天天气真+好,匹配今天天气真好、今天天气真好好、今天天气真好坏好等,+为元字符,代表前面的字符串必须至少出现一次(1次或多次)。今天天气真*好,匹配今天真好、今天天气真好等,*代表前面的字符串可以不出现,也可以出现任意次(0次、1次或多次)。colou?r,匹配color或colour等,? 代表前面的字符串最多出现一次(0次或1次)。
元字符
| 符号 | 匹配的字符 |
|---|---|
| [ABC] | 字符A、B、C |
| [^ABC] | 非A、B、C |
| [A-Z] | 区间A到Z内的字符 |
| [A-Za-z0-9_] | 3个区间加一个下划线之内的字符 |
| . | 除换行符外的所有字符。等价于[^\n\r] |
| \s | 所有空白符(非打印字符) |
| \S | 非空白符 |
| [\s\S] | 所有字符 |
| \w | 字母数字下划线。等价于 [A-Za-z0-9_] |
| \b | 单词边界,即单词与空格连接处。例如,er\b 匹配 never 的 er,不匹配 verb 的 er |
| \B | 非单词边界。er\B 匹配 verb 的 er,不匹配 never 的 er |
| {n} | n 为非负整数,匹配确定的 n 次。o{2} 不匹配Bob 中的 o,匹配 food 中的 oo |
| {n,} | n 为非负整数,至少匹配 n 次 |
| {n,m} | n,m 为非负整数。n<=m:至少匹配 n 次,至多匹配 m 次 |
修饰符(标记)
位于正则表达式外
格式:/pattern/flags
例:/正则表达式/g表示查找字符串中所有的匹配项。
| 修饰符 | 含义 | 描述 |
|---|---|---|
| i | ignore | 不区分大小写 |
| g | global | 全局匹配 |
| m | multiline | 多行匹配,使边界字符^和$匹配每一行的开头和结尾 |
| s | 使特殊字符.包含换行符 |
实例
/\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b/g
匹配字符串 “abcd test@email.com 1234”
中的网址:”test@email.com“
优先级
| 优先级 | 运算符 | 描述 |
|---|---|---|
| 0 | | 转义符 | |
| 1 | ( ) , [ ] | 圆括号和方括号 |
| 2 | * , + , ? , {n} , {n,} , {n,m} | 限定符 |
| 3 | ^ , $ , 任何字符 | 位置和顺序 |
匹配规则
①基本模式匹配
模式,一组描述字符串特征的字符,是正则表达式最基本的元素
例如:模式^once 包含一个元字符^,表示该模式只匹配以once开头的字符串。
该模式与字符串once upon a time匹配,与There once was a man不匹配。
②字符簇
字符簇是一种更自由地描述模式的方法。
- 例1,
[AaEeIiOoUu]是一个表示所有元音字符的字符簇。 - 例2,用模式
^[a-z][0-9]$匹配z2、t6或g7,而不是ab2、r2d3或b52。 - 例3,模式
^.5$与任何两个字符的、以数字5结尾和以非"换行"字符开头的字符串匹配。
③确定重复出现
- 元字符
?与{0,1}是相等的,它们都代表0个或1个前面的内容或前面的内容是可选的 *与{0,}是相等的,都代表0 个或多个前面的内容+与{1,}是相等的,表示1 个或多个前面的内容