d、w、s 是正则预定义字符类,非转义字符;d等价[0-9],w等价[a-zA-Z0-9_],s等价[ ];Unicode模式下行为不变,需用p{Nd}等替代。

JavaScript 中正则表达式里的 d、w、s 并不是“转义字符”,而是**预定义的字符类(character class shorthands)**,用于匹配特定类型的字符。它们前面的反斜杠是正则语法的一部分,不是字符串字面量中的转义。
它们的实际匹配范围
d 匹配任意一个**ASCII 数字字符**,等价于 [0-9]。
注意:它不匹配全角数字(如中文数字“1”)、Unicode 数字(如阿拉伯文数字),也不匹配带符号的数字或小数点。
w 匹配任意一个**“字”字符(word character)**,在 JavaScript(ES5 及之后默认)中等价于:[a-zA-Z0-9_] —— 即英文字母(大小写)、0–9 数字、下划线。
⚠️ 不匹配汉字、日文假名、emoji 或连字符(-)、点号(.)等。
s 匹配任意一个**空白字符(whitespace)**,包括: (空格)、 (制表符)、
(换行符)、
(回车)、(换页符)、(垂直制表符,部分环境支持)。
等价于 [
](注意开头有个空格)。
常见误区与注意事项
- 在字符串字面量中写正则时,反斜杠需双写:
/\d+/或new RegExp("\d+"),因为字符串本身会先解析一次反斜杠。 -
d在 Unicode 模式(/.../u)下行为不变,仍只匹配0–9;如需匹配所有 Unicode 数字,要用p{Nd}(需加u标志)。 -
w在/u模式下也**不会自动扩展为 Unicode 字母**(如中文、俄文),它依然只是[a-zA-Z0-9_]。要匹配 Unicode 单词字符,需用p{L}p{N}_等组合。 -
s在/u模式下新增支持少量 Unicode 空白(如u00A0),但主流浏览器实现略有差异,稳妥起见仍建议显式列出或用p{Z}(需u)。
对应关系速查表
(标准 ECMAScript 行为,非 Unicode 模式)
-
d⇔[0-9] -
w⇔[a-zA-Z0-9_] -
s⇔[ ] - 对应否定形式:
D⇔[^0-9],W⇔[^a-zA-Z0-9_],S⇔[^ ]
实际使用建议
- 处理纯英文/数字场景(如表单校验 ID、手机号前缀),直接用
d和w安全高效。 - 涉及多语言文本(如用户名含中文、邮箱本地部分含 Unicode)时,避免依赖
w,改用显式字符类或 Unicode 属性类(如p{L}p{N}+_)并启用u标志。 - 匹配“空白”时,若需兼容不间断空格( )、零宽空格等,不要只靠
s,可补充u00A0|u2000-u200F|u2028-u2029或用p{Z}(配合u)。










