方括号[...]匹配其中任意一个字符,1(^紧接[后)匹配不在集合中的任意字符;特殊字符在括号内通常失去元字符功能,但]、-、^需注意位置规则。... ↩
![javascript 正则表达式的字符集合 `[...]` 和排除字符集 `[^...]` 怎么匹配](https://img.php.cn/upload/article/001/242/473/178858479214558.png)
方括号 [...] 表示字符集合,匹配其中**任意一个字符**;而 [^...](脱字符 ^ 紧跟左括号)表示排除字符集,匹配**不在括号内列出的任意一个字符**。注意:这里的 ^ 必须是紧接在 [ 后面的第一个字符才起“取反”作用,否则就是普通字符。
字符集合 [abc]:匹配其中任一字符
例如 /[aeiou]/ 可以匹配字符串中任意一个英文元音字母:
-
"hello".match(/[aeiou]/)→["e"] -
"fly".match(/[aeiou]/)→["y"](如果正则含i标志或 y 在集合中)
范围可以用短横线表示,如 [a-z] 匹配任意小写字母,[0-9_] 匹配数字或下划线。特殊字符(如 .、*、+)在方括号内通常**失去特殊含义**,可直接写,无需转义(但 ]、-、^ 需小心位置)。
排除字符集 [^...]:匹配不在集合中的字符
只要 ^ 是 [ 后的第一个字符,整个集合就取反:
立即学习“Java免费学习笔记(深入)”;
-
/[^0-9]/匹配任意**非数字**字符,如空格、字母、标点 -
"a1b2".replace(/[^0-9]/g, "")→"12" -
/[^aeiou]/匹配除 a/e/i/o/u 外的任意单个字符(区分大小写)
注意:[^] 是非法的(空排除集),会报错;[^a^] 表示“除了 a 和 ^ 以外的字符”,因为第二个 ^ 是普通字符。
转义与特殊位置规则
方括号内少数字符有位置敏感性:
-
]必须放在最开头([]a])或转义([a\]])才能表示字面意义 -
-放在开头([-a])或结尾([a-])时是普通连字符;在中间([a-z])才表示范围 -
^放在开头([^a])表示取反;其他位置([a^])就是匹配字符^
不需要对 .、*、+、?、(、) 等转义——它们在 [...] 中不具有元字符功能。
常见误区提醒
容易混淆的点:
-
/[.]/匹配的是字面量.,不是“任意字符”(那是.单独用时的含义) -
/[^.]/匹配的是“非点号”的任意字符(包括换行符,除非加s标志) -
/[a-z^]/不是“排除小写字母”,而是匹配小写字母或^字符(因为^不在开头) - 字符集合只匹配**单个字符**,要匹配多个需配合量词,如
[0-9]+
掌握这组规则的关键是记住:方括号定义“单字符选择池”,^ 的位置决定是否取反,其余符号大多回归字面意义。


















