Glossary
75 terms from "正则表达式:模式匹配入门." Look them up when you get stuck; the first mention in the text carries a hover definition.
| Term | Definition | Source |
|---|---|---|
| \d | 匹配任意一个数字的简写字符类,等价于 [0-9]。 | MDN: Character classes |
| \w | 匹配一个「单词」字符的简写:任意字母、数字或下划线,等价于 [A-Za-z0-9_]。 | MDN: Character classes |
| \s | 匹配一个空白字符的简写:空格、制表符、换行等,一次只匹配一个。 | MDN: Character classes |
| 正则表达式 | 用来在字符串里匹配字符组合的模式:你交给引擎一个模式和一个字符串,它告诉你模式是否出现、出现在哪里。 | MDN: Regular expressions (JavaScript Guide) |
| 字面量 | 模式里只匹配自己的字符,比如 /cat/ 里的 c、a、t 各自只匹配同一个字符。 | MDN: Regular expressions (JavaScript Guide) |
| 直接匹配 | 只由字面量产生的匹配:模式的确切字符序列在字符串里被原样找到,不涉及任何特殊字符。 | MDN: Regular expressions (JavaScript Guide) |
| 等于整个字符串 | 初学者最常带进来的错误要求:字面量模式只要能在字符串里面被找到就算成功,并不需要和整串相等。 | MDN: Regular expressions (JavaScript Guide) |
| 元字符 | 模式里充当指令而不是字母的特殊字符,如 . * + ? ^ $ [ ] ( ) 和 \。 | MDN: Regular expressions (JavaScript Guide) |
| test | RegExp 的方法,回答「这个模式是否出现在字符串里的任何位置」,返回 true 或 false。 | MDN: Regular expressions (JavaScript Guide) |
| match | String 的方法,运行模式后返回实际匹配到的文本(一个数组),而不是布尔值。 | MDN: String.prototype.match() |
| RegExp | 两条斜杠之间的模式所创建的 JavaScript 对象类型,也是 test 这类模式侧方法的归属方。 | MDN: Regular expressions (JavaScript Guide) |
| 索引 0 的元素 | 匹配成功后结果数组的第一个槽位,永远存放模式匹配到的整段文本。 | MDN: String.prototype.match() |
| index | 匹配结果上的一个额外属性,给出匹配在被搜索字符串中的起始位置。 | MDN: String.prototype.match() |
| 区分大小写 | 默认的匹配行为:字面量只匹配大小写相同的同一个字符,所以 /QUICK/ 匹配不到 "quick"。 | MDN: Regular expressions (JavaScript Guide) |
| 第一次出现 | 不带全局标志时一次运行返回的东西:引擎从左往右扫描,在模式第一次成功的地方停下。 | MDN: String.prototype.match() |
| 字符类 | 写在方括号里的集合,恰好匹配集合中的一个字符,如 [abc]。 | regular-expressions.info: Character Classes |
| 范围([a-d]) | 字符类内部用连字符表示的一段连续字符的简写,[a-d] 等价于 [abcd]。 | MDN: Character classes |
| 取反字符类 | 方括号内最前面放一个插入符的字符类,匹配任何不在集合里的单个字符,如 [^a-z]。 | regular-expressions.info: Character Classes |
| 开头的插入符 | 放在方括号内部最前面的 ^,它对字符类取反;同一个符号出现在方括号外面时含义完全不同。 | regular-expressions.info: Character Classes |
| \S | \s 的大写对应形式,匹配一个不是空白的字符。 | MDN: Character classes |
| 点号(.) | 匹配除行终止符之外任意单个字符的元字符,除非打开 s(dotAll)标志。 | MDN: Character classes |
| 行终止符 | \n、\r 这一族换行字符,默认标志下点号拒绝匹配它们。 | MDN: Character classes |
| s(dotAll)标志 | 打开后取消点号的行终止符例外,让点号真正匹配包括换行在内的任意字符。 | MDN: Character classes |
| 转义 | 在元字符前面放一个反斜杠,剥掉它的特殊能力,让它按字面匹配。 | MDN: Regular expressions (JavaScript Guide) |
| 字面量的点 | 输入里一个真正的句点,要靠把点转义成 \. 来匹配,而不是留着它当「任意字符」的元字符。 | MDN: Character classes |
| 单词字符 | 字母、数字和下划线。`\b` 是否成立,取决于交界两侧其中一个是单词字符、另一个不是。 | MDN: Assertions (anchors and boundaries) |
| 量词 | 紧跟在一个条目后面的元字符,说明该条目重复多少次。 | MDN: Quantifiers |
| 0 次或更多(*) | * 量词,把前面的条目重复任意次数,包括一次也不出现。 | MDN: Quantifiers |
| 1 次或更多(+) | + 量词,要求前面的条目至少出现一次,然后有多少要多少。 | MDN: Quantifiers |
| 0 次或 1 次(?) | ? 量词,允许前面的条目出现零次或一次,如 colou?r。 | MDN: Quantifiers |
| {n} | 精确计数量词,让前面的条目恰好出现 n 次。 | MDN: Quantifiers |
| {n,m} | 有界计数量词,让前面的条目至少出现 n 次、至多 m 次。 | MDN: Quantifiers |
| {n,} | 开放计数量词,让前面的条目出现 n 次或更多,没有上限。 | MDN: Quantifiers |
| 前面的条目 | 量词左边紧挨着的那一个 token——一个字面量、一个字符类,或(后面课里的)一个分组——它是量词唯一会重复的东西。 | MDN: Quantifiers |
| 单个 token | 量词的作用域规则:它永远只附着在恰好一个 token 上,绝不覆盖模式里更长的一段。 | MDN: Quantifiers |
| 空匹配 | 一次零长度的成功匹配,允许零次重复的量词就能产生它,例如 /z*/ 跑在不含 z 的字符串上。 | MDN: Quantifiers |
| 精确计数 | 用 {n} 把重复次数钉死在一个固定数字上,这是五位邮编这类定长格式真正需要的东西。 | MDN: Quantifiers |
| 宽松模式 | 量词允许的次数比真实格式允许的更多的模式,会让畸形输入通过校验。 | MDN: Quantifiers |
| 锚点 | 只匹配**位置**、不匹配字符的元字符。`^` 标记字符串开头、`$` 标记结尾、`\b` 标记词边界;它们本身不进入匹配结果的文本。 | MDN: Assertions (anchors and boundaries) |
| 零宽(zero-width) | 锚点的共同性质:它在某个位置上匹配成功,但匹配长度为 0,不消耗任何字符。 | MDN: Assertions (anchors and boundaries) |
| 零长度 | 词边界匹配的长度:`\b` 和 `^`、`$` 一样是锚点,它在一个叫做词边界的位置上匹配,而这个匹配是零长度的。 | regular-expressions.info: Word Boundaries |
| 词边界(word boundary) | `\b`,匹配单词字符与非单词字符之间的位置,也包括字符串的开头和结尾。它的用途是匹配完整单词。 | regular-expressions.info: Word Boundaries |
| 非单词字符 | 单词字符之外的字符,比如空格和标点。`\b` 匹配在单词字符与非单词字符的交界处。 | MDN: Assertions (anchors and boundaries) |
| 完整单词 | 两侧都有词边界的一段单词字符。`/\bcat\b/` 匹配作为独立单词的 "cat",不匹配 "category" 或 "scatter" 里的 "cat"。 | regular-expressions.info: Word Boundaries |
| 校验器 | 两端都上锚的模式,如 `/^\d{5}$/`,要求**整个**字符串恰好是这个模式、再无其他。 | MDN: Assertions (anchors and boundaries) |
| 前缀检查 | 只带开头锚点、没有结尾锚点的模式实际做的事:它只要求开头对,后面还能挂任何东西。 | MDN: Assertions (anchors and boundaries) |
| 位置 0 | `^` 锚定的位置,即字符串的最开头。`/^cat/` 只在 "cat" 位于位置 0 时匹配。 | MDN: Assertions (anchors and boundaries) |
| 不消耗任何字符 | 锚点的行为方式:它们把匹配从两侧圈起来,但不给匹配结果添加任何字符。 | MDN: Assertions (anchors and boundaries) |
| 输入的两端 | 两个锚点标记的位置:`^` 在开头、`$` 在结尾。合起来 `^…$` 就是「整个字符串恰好是它」。 | MDN: Assertions (anchors and boundaries) |
| 多行 `m` 标志 | 加上它之后,`^` 和 `$` 还会在每一行的开头和结尾匹配,而不只是整个字符串的两端。 | MDN: Assertions (anchors and boundaries) |
| ^…$ | 两端都上锚的写法,读作「开头、然后这个模式、然后结尾」,即整个字符串恰好是它、前后都没有余地。 | MDN: Assertions (anchors and boundaries) |
| 捕获组(capturing group) | 用圆括号包起来的一段模式。它既把 token 捆成一束供量词作用,又记住自己匹配到的内容供事后取出。 | MDN: Groups and backreferences |
| 非捕获组(non-capturing group) | `(?:…)`,把 token 捆在一起但不记住匹配内容,因此不会往结果数组里添加条目。当圆括号只是为了托住量词或一段备选时用它。 | MDN: Groups and backreferences |
| (?:…) | 非捕获组的写法。它分组但不捕获:匹配到的子串无法从结果数组的元素里取回。 | MDN: Groups and backreferences |
| 析取(disjunction) | `|` 分隔多个备选项,任何一个备选匹配上输入,整个析取就算匹配。引擎先试左边、失败再试右边。 | MDN: Disjunction (the | operator) |
| 竖线(|) | 提供备选的选择运算符:`/cat|dog/` 匹配 "cat" 或 "dog"。它在正则里优先级最低。 | MDN: Disjunction (the | operator) |
| 优先级最低 | `|` 在正则表达式里的优先级性质:它在尽可能宽的位置把模式劈开。要限定作用范围,必须把备选包进组里。 | MDN: Disjunction (the | operator) |
| 索引 0 | `match` 返回数组的第一个位置,永远是整个匹配的文本,而不是任何捕获组的内容。 | MDN: String.prototype.match() |
| 索引 1 | `match` 结果数组里第一个捕获组的文本所在位置。第二个组在索引 2,依此类推。 | MDN: String.prototype.match() |
| 第一个组 | 模式里最左边那对圆括号,它捕获的文本出现在匹配数组的索引 1。 | MDN: Groups and backreferences |
| 第二个组 | 模式里第二对左圆括号所开启的捕获组,其文本出现在索引 2。 | MDN: Groups and backreferences |
| 与左圆括号的出现顺序一致 | 捕获组在结果数组里的排列规则:按各组左圆括号在模式中从左到右出现的顺序编号。 | MDN: Groups and backreferences |
| 圆括号之外 | 不在任何圆括号里的部分只参与匹配、不被捕获。`(\d{2}):(\d{2})` 里的 `:` 匹配了冒号但不进任何组。 | MDN: Groups and backreferences |
| 匹配数组 | `match` 在不带全局标志时返回的数组:索引 0 是整个匹配,之后依次是各捕获组的文本,另带 `index` 和 `input` 属性。 | MDN: String.prototype.match() |
| 不带全局标志 | `match` 的这种用法只返回第一个完整匹配及其捕获组,结果与 `exec` 相同,因此捕获组才会出现在索引 1 及之后。 | MDN: String.prototype.match() |
| 贪婪(greedy) | 量词的默认行为:`*`、`+` 尽可能多地重复匹配,把前面的 token 重复尽可能多次,再往回退出刚好够让模式剩余部分匹配的量。 | MDN: Quantifiers |
| 懒惰(lazy,非贪婪) | 在量词后面紧跟一个 `?` 得到的行为:一旦达到最少匹配次数就停下,重复尽可能少的次数。 | regular-expressions.info: Repetition (greedy and lazy) |
| 懒惰修饰符 | `?` 紧跟在**另一个**量词后面时(`+?`、`*?`、`{2,5}?`)的角色。单独跟在普通 token 后面时,它是「0 次或 1 次」的量词。 | MDN: Quantifiers |
| 尽可能少 | 懒惰量词的重复策略:`.+?` 把点重复尽可能少的次数,每吃一个字符就检查模式剩余部分能否匹配,非继续不可才继续。 | regular-expressions.info: Repetition (greedy and lazy) |
| .+? | 懒惰的「一个或多个任意字符」。配上转义后的定界符,就是从长字符串里提取第一段被定界内容的标准形状。 | MDN: Quantifiers |
| 定界符 | 包住你想提取内容的两个字面量字符,比如引号、方括号或圆括号。它们若本身是元字符,就必须转义。 | regular-expressions.info: Repetition (greedy and lazy) |
| 转义后的字面量圆括号 | `\(` 和 `\)`,匹配文本里真正的圆括号字符。必须转义,因为圆括号本身是分组的元字符。 | MDN: Regular expressions (JavaScript Guide) |
| 语义合法性 | 正则校验不到的那一层:`/^\d{4}-\d{2}-\d{2}$/` 检查的是形状而非含义,所以 "2024-99-99" 能通过它。 | MDN: Assertions (anchors and boundaries) |
| ISO 日期 | `YYYY-MM-DD` 形状:四位数字、连字符、两位数字、连字符、两位数字。校验它用 `/^\d{4}-\d{2}-\d{2}$/`。 | MDN: Quantifiers |
| 提取器 | 带捕获组、通常**不**上锚的模式,用来从更长的字符串里把片段拽出来,与两端上锚的校验器分工不同。 | MDN: String.prototype.match() |