字符类

精通字符类:构建允许字符的集合、一次覆盖整个范围、用取反把集合里外翻转,并熟练使用每个猎手都烂熟于心的简写。

阅读规则:指南中的“字符类” →反复操练:字符城堡 →

本课程建立在狩猎入门之上

你将学到

字符集 范围 取反 简写 十六进制范围

步骤 · 13

  1. 01一个位置,多种选择讲解
  2. 02字符集狩猎
  3. 03范围:a-z狩猎
  4. 04范围:0-9狩猎
  5. 05取反字符集狩猎
  6. 06简写:\d狩猎
  7. 07简写三件套示例
  8. 08取反简写狩猎
  9. 09元字符变成字面量狩猎
  10. 10组合范围狩猎
  11. 11大写范围狩猎
  12. 12高尔夫:最短抓法狩猎
  13. 13位置已掌握讲解

正则字符类、范围与简写

字符类让正则中的一个位置可以接受多种字符。把可选的字符写在方括号里,字符类就匹配其中任意一个。gr[ae]y 能同时接受 gray 和 grey 两种拼写,因为 gr 后面那个位置可以是 a,也可以是 e。有了字符类,你就能表达“这里是个元音”或“那里是某个数字”,而不必把每个可能的单词都写出来。

加上范围和取反,字符类就更好用了。两个字符之间的连字符表示它们之间的所有字符,所以 [1-5] 是 1 到 5 之间的任意数字,[A-Za-z] 是任意一个普通字母。紧跟在左方括号后的脱字符会把集合反转:[^,] 是除逗号以外的任意字符。无论里面写了什么,一个字符类总是恰好占用一个字符。

有些集合太常用,正则干脆给了它们简写。\d 是数字,\w 是单词字符(字母、数字或下划线),\s 是空白。它们的大写形式 \D、\W 和 \S 表示相反的含义。每当狩猎要求某个位置是“这些里的任意一个”或“除了这些以外的任何字符”时,就该用字符类了。

示例

  1. /gr[ae]y/

    抓住

    • gray
    • grey
    • greyhound

    放过

    • groan
    • grid

    这个字符类为第三个字母提供两种选择,别无其他。

  2. /[1-5]star/

    抓住

    • 1star
    • 5stars
    • my3star

    放过

    • 6star
    • 0star
    • star

    一个范围就在一个位置里覆盖了 1 到 5 的每个数字。

  3. /z[^z]/

    抓住

    • zap
    • lazy
    • ozone

    放过

    • buzz
    • fizz
    • quiz

    取反字符类仍然需要一个字符,所以位于末尾的 z 不会匹配,后面紧跟另一个 z 的 z 也不会。

  4. /\d\s\d/

    抓住

    • 1 2
    • room 4 5

    放过

    • 12
    • 1-2

    简写可以像字母一样组合:一个数字、一个空白,再接一个数字。

常见错误

  • 把字符类当成单词。 [cat] 匹配一个 c、a 或 t,而不是单词 cat,所以它也会抓住 tea 和 act。
  • 写出跨越大小写的范围。 [a-Z] 在 JavaScript 中会报错,而 [A-z] 会悄悄放进 [、^ 和 _ 等符号;请用 [A-Za-z]。
  • 以为 \w 包括带重音的字母。 在 JavaScript 中它只表示 ASCII 字母、数字和下划线,所以 café 里的 é 算作非单词字符,汉字也一样。

阅读规则:指南中的“字符类” →反复操练:字符城堡 →

延伸阅读:正则表达式字符类:\d、\w、\s、[a-z] 及其陷阱 →