锚点与边界

匹配位置,而不是字符——把正则钉在开头、结尾或单词之间的接缝上。

阅读规则:指南中的“锚点与边界” →反复操练:抛锚定位 →

本课程建立在量词之上

你将学到

开头与结尾 精确长度 单词边界 非边界

步骤 · 13

  1. 01零宽猎手讲解
  2. 02锚定开头狩猎
  3. 03锚定结尾狩猎
  4. 04两端锚定——精确匹配狩猎
  5. 05精确长度狩猎
  6. 06用花括号计数狩猎
  7. 07单词边界狩猎
  8. 08只要完整单词狩猎
  9. 09非边界狩猎
  10. 10以大写字母开头狩猎
  11. 11以数字结尾狩猎
  12. 12高尔夫:以“ing”结尾狩猎
  13. 13位置已掌握讲解

正则锚点与单词边界

正则表达式的大部分内容都在匹配字符:字母、数字、点号。锚点匹配的却是位置。它们位于字符之间,不占用任何字符,所以它们告诉正则可以在哪里匹配,而不是匹配什么。

两个主要的锚点是表示文本开头的 ^ 和表示结尾的 $。在前面加上 ^,匹配就必须从第一个字符开始;在后面加上 $,匹配就必须在最后一个字符结束。两个都用,正则就必须覆盖整段文本,这正是检查输入是否恰好是一个代码、数字或日期、别无其他的方法。

单词边界 \b 是单词字符(字母、数字或下划线)与其他任何内容(包括文本边缘)之间的接缝。它让你找到一个完整的单词,而不会在更长的单词里误抓。它的反面 \B 在 \b 不匹配的地方匹配,通常是在单词内部。在狩猎中,要放过那些字母对了、位置不对的单词,锚点往往是最短的办法。

示例

  1. /^re/

    抓住

    • redo
    • remix
    • return

    放过

    • fire
    • pure
    • tree

    脱字符把 re 绑定在前两个字母上,所以只是在中间或结尾含有它的单词都会被放过。

  2. /^v\d+$/

    抓住

    • v1
    • v12
    • v2026

    放过

    • v1.2
    • xv1
    • v

    两个锚点都用上,整段文本必须是一个 v 再接数字,所以多一个点号、前面多一个字母,或者只有一个光秃秃的 v,都会匹配失败。

  3. /\bpen\b/

    抓住

    • pen
    • a pen
    • pen pal

    放过

    • open
    • pencil
    • happen

    两侧的边界把 pen 当作独立的单词找出来,有别的字母紧挨着时就跳过。

  4. /\Bair\B/

    抓住

    • chairs
    • repairs
    • fairy

    放过

    • air
    • airy
    • chair

    两侧都用 \B,要求前后都有单词字符,所以位于单词开头或结尾的 air 会被放过。

常见错误

  • 只锚定一端。 ^\d+ 仍然能匹配 12abc,因为没有东西阻止匹配在字母前停下;如果整段文本都必须符合,就加上 $。
  • 以为 \b 认识所有文字。 在 JavaScript 中只有 A-Z、a-z、0-9 和 _ 是单词字符(汉字也不算),所以 \bcaf\b 会在 café 内部匹配,co-op 里的连字符也算作边界。
  • 在字符串里丢了反斜杠。 在 JavaScript 字符串中,"\b" 是退格符,所以要写成 new RegExp("\\bpen\\b"),或者直接用字面量 /\bpen\b/。

阅读规则:指南中的“锚点与边界” →反复操练:抛锚定位 →

延伸阅读:正则锚点:^、$ 与多行模式详解 →