3、正则表达式中的字符类详解
2025/9/23大约 4 分钟
正则表达式中的字符类详解
字符类是正则表达式中的基本概念,它允许你定义一个字符集合,使正则表达式可以匹配这个集合中的任意一个字符。本文将详细介绍正则表达式中的字符类及其用法。
基本字符类
方括号字符类
最基本的字符类使用方括号 []
表示,方括号内的任何一个字符都可以被匹配:
const regex = /[abc]/; // 匹配 'a'、'b' 或 'c'
console.log(regex.test('apple')); // true - 包含 'a'
console.log(regex.test('banana')); // true - 包含 'a' 和 'b'
console.log(regex.test('cherry')); // true - 包含 'c'
console.log(regex.test('grape')); // false - 不包含 'a'、'b' 或 'c'
范围字符类
使用连字符 -
可以指定字符范围:
const regex = /[a-z]/; // 匹配任何小写字母
console.log(regex.test('Apple')); // true - 包含小写字母 'p', 'p', 'l', 'e'
console.log(regex.test('123')); // false - 不包含小写字母
可以组合多个范围:
const regex = /[a-zA-Z0-9]/; // 匹配任何字母或数字
console.log(regex.test('Hello123')); // true
console.log(regex.test('!@#')); // false
否定字符类
在左方括号后紧跟一个脱字符 ^
可以否定字符类,表示匹配除了字符类中字符以外的任何字符:
const regex = /[^0-9]/; // 匹配任何非数字字符
console.log(regex.test('abc')); // true - 包含非数字
console.log(regex.test('123')); // false - 只包含数字
预定义字符类
为了简化常见字符集合的表示,正则表达式提供了一系列预定义的字符类:
字符类 | 描述 | 等价表示 |
---|---|---|
\d | 匹配任何数字字符 | [0-9] |
\D | 匹配任何非数字字符 | [^0-9] |
\w | 匹配任何字母、数字或下划线 | [a-zA-Z0-9_] |
\W | 匹配任何非字母、数字或下划线 | [^a-zA-Z0-9_] |
\s | 匹配任何空白字符(空格、制表符、换行等) | [ \t\n\r\f\v] |
\S | 匹配任何非空白字符 | [^ \t\n\r\f\v] |
例如:
const regex1 = /\d+/; // 匹配一个或多个数字
console.log(regex1.test('123')); // true
const regex2 = /\s\w+/; // 匹配空白字符后跟一个或多个字母数字下划线
console.log(regex2.test('hello world')); // true - 匹配' world'
点字符类
点 .
是一个特殊的字符类,它匹配除换行符以外的任何单个字符:
const regex = /a.c/; // 匹配 'a' 后跟任意字符再跟 'c'
console.log(regex.test('abc')); // true
console.log(regex.test('a1c')); // true
console.log(regex.test('a c')); // true
console.log(regex.test('ac')); // false - 中间缺少一个字符
console.log(regex.test('abbc')); // false - 中间有两个字符
如果想让点字符也能匹配换行符,可以使用 s
标志:
const text = 'line1\nline2';
console.log(/line./.test(text)); // true - 匹配 'line1'
console.log(/line.$/.test(text)); // false - '.' 不匹配换行符
console.log(/line.[\s\S]/.test(text)); // true - 使用字符类匹配任何字符包括换行符
console.log(/line./s.test(text)); // true - 使用 's' 标志让 '.' 匹配换行符
字符类转义
如果要在字符类中匹配特殊字符本身(如 .
, *
, [
, ]
等),需要使用反斜杠 \
进行转义:
const regex = /[.?*+^$[\](){}|-]/; // 匹配任何一个特殊字符
console.log(regex.test('a*b')); // true - 包含 '*'
console.log(regex.test('abc')); // false - 不包含特殊字符
注意,在字符类中,某些特殊字符不需要转义。例如,^
只有在方括号内的第一个位置才有特殊含义,-
只有在两个字符之间才表示范围。
字符类的实际应用
验证用户名
// 验证只包含字母、数字、下划线和连字符的用户名
const usernameRegex = /^[a-zA-Z0-9_-]+$/;
console.log(usernameRegex.test('user_name-123')); // true
console.log(usernameRegex.test('user@name')); // false - 包含 '@'
匹配十六进制颜色值
// 匹配形如 #RGB 或 #RRGGBB 的颜色值
const colorRegex = /^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/;
console.log(colorRegex.test('#FFF')); // true
console.log(colorRegex.test('#F1F1F1')); // true
console.log(colorRegex.test('#FFFF')); // false - 长度不匹配
console.log(colorRegex.test('FFF')); // false - 缺少 '#'
掌握字符类是使用正则表达式的基础。通过合理使用字符类,可以使你的正则表达式更简洁、更精确。在下一篇文章中,我们将探讨正则表达式中的量词和重复。