本课程建立在狩猎入门之上
你将学到
字符集 范围 取反 简写 十六进制范围
步骤 · 13
- 01一个位置,多种选择讲解
- 02字符集狩猎
- 03范围:a-z狩猎
- 04范围:0-9狩猎
- 05取反字符集狩猎
- 06简写:\d狩猎
- 07简写三件套示例
- 08取反简写狩猎
- 09元字符变成字面量狩猎
- 10组合范围狩猎
- 11大写范围狩猎
- 12高尔夫:最短抓法狩猎
- 13位置已掌握讲解
正则字符类、范围与简写
字符类让正则中的一个位置可以接受多种字符。把可选的字符写在方括号里,字符类就匹配其中任意一个。gr[ae]y 能同时接受 gray 和 grey 两种拼写,因为 gr 后面那个位置可以是 a,也可以是 e。有了字符类,你就能表达“这里是个元音”或“那里是某个数字”,而不必把每个可能的单词都写出来。
加上范围和取反,字符类就更好用了。两个字符之间的连字符表示它们之间的所有字符,所以 [1-5] 是 1 到 5 之间的任意数字,[A-Za-z] 是任意一个普通字母。紧跟在左方括号后的脱字符会把集合反转:[^,] 是除逗号以外的任意字符。无论里面写了什么,一个字符类总是恰好占用一个字符。
有些集合太常用,正则干脆给了它们简写。\d 是数字,\w 是单词字符(字母、数字或下划线),\s 是空白。它们的大写形式 \D、\W 和 \S 表示相反的含义。每当狩猎要求某个位置是“这些里的任意一个”或“除了这些以外的任何字符”时,就该用字符类了。
示例
抓住
- gray
- grey
- greyhound
放过
- groan
- grid
这个字符类为第三个字母提供两种选择,别无其他。
抓住
- 1star
- 5stars
- my3star
放过
- 6star
- 0star
- star
一个范围就在一个位置里覆盖了 1 到 5 的每个数字。
抓住
- zap
- lazy
- ozone
放过
- buzz
- fizz
- quiz
取反字符类仍然需要一个字符,所以位于末尾的 z 不会匹配,后面紧跟另一个 z 的 z 也不会。
抓住
- 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é里的 é 算作非单词字符,汉字也一样。
阅读规则:指南中的“字符类” →反复操练:字符城堡 →