正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。
在 JavaScript 中,正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法,以及 String 的 match、matchAll、replace、search 和 split 方法。
量词
量词表示要匹配的字符或表达式的数量。默认情况下,量词是“贪婪的”,这意味着它们试图匹配尽可能多的字符串。如果在量词的后面紧跟 ?,如:*?、+?、??、{1,3}? 等,将会使量词变为非贪婪(匹配尽量少的字符)。例如,对 "123abc" 使用 /\d+/ 将会匹配 "123",而使用 /\d+?/ 则只会匹配到 "1"
字符 | 含义 |
|---|---|
| 匹配前面一个表达式 0 次或者多次。等价于 |
| 匹配前面一个表达式 1 次或者多次。等价于 |
| 匹配前面一个表达式 0 次或者 1 次。等价于 |
| n 是一个正整数,匹配了前面一个字符刚好出现了 n 次 |
| n 是一个正整数,匹配前一个字符至少出现了 n 次 |
| n 和 m 都是整数。匹配前面的字符至少 n 次,最多 m 次。如果 n 或者 m 的值是 0,这个值被忽略 |
字符类
字符类可以区分各种字符,例如区分字母和数字
字符 | 含义 |
|---|---|
| 匹配除换行符之外的任何单个字符 |
| 匹配一个数字。等价于 |
| 匹配一个非数字字符。等价于 |
| 匹配一个空白字符,包括空格、制表符、换页符和换行符 |
| 匹配一个非空白字符 |
| 匹配一个单字字符(字母、数字或者下划线)。等价于 |
| 匹配一个非单字字符。等价于 |
组和范围
组和范围表示表达式字符的组和范围
字符 | 含义 |
|---|---|
| 匹配 'x' 或者 'y' |
| 一个字符集合。匹配方括号中的任意字符,包括转义序列。你可以使用破折号 |
| 一个反向字符集。也就是说,它匹配任何没有包含在方括号中的字符 |
| 捕获组:它会匹配 'x' 并且记住匹配项 |
| 非捕获组:匹配 'x' 但是不记住匹配项 |
| 其中 n 是一个正整数。表示第 n 个被捕获括号匹配的子字符串(计算左括号),注意 |
| 具名捕获组:匹配 'x' 并将其存储在返回的匹配项的 |
断言
断言的组成之一是边界。对于文本、词或模式,边界可以用来表明它们的起始或终止部分(如向前断言,向后断言以及条件表达式)
边界类断言
字符 | 含义 |
|---|---|
| 匹配输入的开始 |
| 匹配输入的结束 |
| 匹配单词的边界,这是一个字的字符前后没有另一个字的字符位置, 例如在字母和空格之间 |
| 匹配非单词的边界 |
其他断言
字符 | 含义 |
|---|---|
| 向前断言:匹配 'x' 仅当 'x' 后面跟着 'y' |
| 向前否定断言:匹配 'x' 仅当 'x' 后面不跟着 'y' |
| 向后断言:匹配 'x' 仅当 'x' 前面是 'y' |
| 向后否定断言:匹配 'x' 仅当 'x' 前面不是 'y' |
标志
标志 | 描述 |
|---|---|
| 全局搜索 |
| 不区分大小写搜索 |
| 多行搜索 |
| 允许 |
| 使用 unicode 码的模式进行匹配 |
| 执行“粘性( |