SkyBlog

正则表达式

常用基础正则表达式教程

正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

JavaScript 中,正则表达式也是对象。这些模式被用于 RegExpexectest 方法,以及 StringmatchmatchAllreplacesearchsplit 方法。

量词

量词表示要匹配的字符或表达式的数量。默认情况下,量词是“贪婪的”,这意味着它们试图匹配尽可能多的字符串。如果在量词的后面紧跟 ?,如:*?+???{1,3}? 等,将会使量词变为非贪婪(匹配尽量少的字符)。例如,对 "123abc" 使用 /\d+/ 将会匹配 "123",而使用 /\d+?/ 则只会匹配到 "1"

字符含义
*匹配前面一个表达式 0 次或者多次。等价于 {0,}
+匹配前面一个表达式 1 次或者多次。等价于 {1,}
?匹配前面一个表达式 0 次或者 1 次。等价于 {0,1}
{n}n 是一个正整数,匹配了前面一个字符刚好出现了 n 次
{n,}n 是一个正整数,匹配前一个字符至少出现了 n 次
{n,m}n 和 m 都是整数。匹配前面的字符至少 n 次,最多 m 次。如果 n 或者 m 的值是 0,这个值被忽略

字符类

字符类可以区分各种字符,例如区分字母和数字

字符含义
.匹配除换行符之外的任何单个字符
\d匹配一个数字。等价于 [0-9]
\D匹配一个非数字字符。等价于 [^0-9]
\s匹配一个空白字符,包括空格、制表符、换页符和换行符
\S匹配一个非空白字符
\w匹配一个单字字符(字母、数字或者下划线)。等价于 [A-Za-z0-9_]
\W匹配一个非单字字符。等价于 [^A-Za-z0-9_]

组和范围

组和范围表示表达式字符的组和范围

字符含义
x|y匹配 'x' 或者 'y'
[xyz][0-9]一个字符集合。匹配方括号中的任意字符,包括转义序列。你可以使用破折号 - 来指定一个字符范围。对于点 . 和星号 * 这样的特殊符号在一个字符集中没有特殊的意义。他们不必进行转义,不过转义也是起作用的
[^xyz][^0-9]一个反向字符集。也就是说,它匹配任何没有包含在方括号中的字符
(x)捕获组:它会匹配 'x' 并且记住匹配项
(?:x)非捕获组:匹配 'x' 但是不记住匹配项
\n其中 n 是一个正整数。表示第 n 个被捕获括号匹配的子字符串(计算左括号),注意 \1\2、...、\n 是用在正则表达式的匹配环节,而在正则表达式的替换环节,则要使用像 $1$2、...、$n 这样的语法
(?<Name>x)具名捕获组:匹配 'x' 并将其存储在返回的匹配项的 groups 属性中,该属性位于<Name>指定的名称下。尖括号(<>) 用于组名。

断言

断言的组成之一是边界。对于文本、词或模式,边界可以用来表明它们的起始或终止部分(如向前断言,向后断言以及条件表达式)

边界类断言

字符含义
^匹配输入的开始
$匹配输入的结束
\b匹配单词的边界,这是一个字的字符前后没有另一个字的字符位置, 例如在字母和空格之间
\B匹配非单词的边界

其他断言

字符含义
x(?=y)向前断言:匹配 'x' 仅当 'x' 后面跟着 'y'
x(?!y)向前否定断言:匹配 'x' 仅当 'x' 后面不跟着 'y'
(?<=y)x向后断言:匹配 'x' 仅当 'x' 前面是 'y'
(?<!y)x向后否定断言:匹配 'x' 仅当 'x' 前面不是 'y'

标志

标志描述
g全局搜索
i不区分大小写搜索
m多行搜索
s允许 . 匹配换行符
u使用 unicode 码的模式进行匹配
y执行“粘性(sticky)”搜索,匹配从目标字符串的当前位置开始