方括号[]在JavaScript正则中定义字符集,匹配其中任意一个字符;^在开头表示否定,-在中间表范围,]需首置或转义,Unicode推荐用p{Script=Han}等预定义类。

方括号 [] 在 JavaScript 正则表达式中定义字符集(character class),表示“匹配其中任意一个字符”,不是按顺序、也不是整体匹配,而是单字符匹配。
基础匹配:单字符择一
方括号内的每个字符(除少数元字符外)都视为字面量,正则引擎会尝试匹配字符串中当前位置的字符是否属于该集合。
-
[abc]匹配 a、b 或 c 中的任意一个字符(仅一个) -
[0-9]匹配任意一位数字(连字符-在中间时表示范围,是特例) -
[^aeiou]中的^在开头表示“否定”,即匹配非元音字母的任意单个字符
特殊字符在方括号内的行为
方括号内部大多数元字符会自动失去特殊含义,变成普通字符;但仍有几个例外需要留意:
-
^只有出现在最开头才表示“取反”,如[^a];若在中间或末尾,就是字面量 ^,如[a^b]可匹配 a、^ 或 b -
-只有出现在两个字符之间(如a-z)才表示范围;放在开头或结尾时是字面量,如[-abc]或[abc-]都能匹配短横线 -
]必须作为第一个字符(紧跟[后)才能表示字面量,如[]abc]表示匹配 ]、a、b 或 c;否则它标记字符集结束 -
仍可用来转义,例如[-[]]安全地匹配 -、[、]
常见易错点与建议写法
实际书写字符集时,顺序和位置影响语义,稍不注意就会出错:
立即学习“Java免费学习笔记(深入)”;
- 避免把
^写在非开头位置——[a^b]不是否定,而是包含 ^ - 想匹配连字符又用范围时,把它放在开头或结尾:
[-a-z]或[a-z-],比[a-z-]更清晰 - 要匹配右括号
],优先写成[]a-z](右括号为首),而不是依赖转义 - 字符集不支持嵌套,
[a[bc]]中第二个[是普通字符,整个表达式等价于[a[bc]
Unicode 字符与预定义类的替代考虑
对于中文、emoji 或更复杂的字符需求,直接列字符集易出错且不可读:
- 匹配中文常用字?别写
[\u4e00-\u9fa5](覆盖不全且不推荐),改用\p{Script=Han}(需u标志) - 匹配空白?
[ \t\n\r\f\v]不如\s简洁可靠 - 匹配“字母或数字”?
[a-zA-Z0-9]可替换为\w(注意\w默认不含中文,\w+u标志也不扩展汉字)


















