开发者参考

正则表达式速查表:模式、标志与安全测试

本速查表面向 JavaScript 正则语法。匹配成功并不能证明输入真实或可信;电子邮件、身份、URL 与安全检查仍需业务规则和服务端验证。

在实时工具中测试
实践方法

从语法到可靠结果

01

先写清验证目标

编写正则表达式前,先用完整句子说明允许的格式与必须拒绝的边界。对于电话、邮箱或身份类字段,字符形状只是其中一层;长度、国家或机构规则以及所有权验证需要分别处理。

02

使用小型正反样本

至少准备一个应当匹配的样本、一个应当拒绝的样本,以及一个超长或错误输入。使用全局标志时检查全部匹配和 lastIndex;处理多行文本时分别验证 m 与 s 的影响。

03

上线前的验收检查

在目标运行时再次执行表达式,并覆盖 Unicode 字符和异常换行。限制用户提供的表达式;在用恶意长输入测量嵌套量词的回溯成本之前,不要把正则当作安全边界。

04

何时应改用解析器

单个正则表达式并不是嵌套 JSON、HTML、编程语言、自由格式邮寄地址或完整邮箱标准的可靠解析器。应先使用相应解析器或领域库,只把正则用于范围明确且已说明限制的预检查。

01

核心构件

语法含义示例
.除换行符外的任意单个字符a.c
\d / \D数字 / 非数字\d{4}
\w / \WASCII 单词字符 / 其反集\w+
[a-z] / [^a-z]范围 / 否定字符类[A-F0-9]
^ / $输入或行的开头 / 结尾^OK$
02

重复与分组

语法含义示例
* / + / ?零次或多次 / 一次或多次 / 可选https?
{n} / {n,m}精确次数或范围重复\d{2,4}
(abc) / (?:abc)捕获组 / 非捕获组(?:png|webp)
(?<name>...)命名捕获组(?<year>\d{4})
(?=...) / (?!...)正向 / 负向先行断言\d+(?=px)
03

JavaScript 标志

语法含义示例
g查找全部匹配,而非在首个匹配处停止
i忽略大小写
m让 ^ 与 $ 按行生效
s允许 . 匹配换行符
u / vUnicode 模式;请检查引擎支持
FAQ

常见问题

正则表达式能验证电子邮件地址吗?+

正则只能检查候选格式。可送达性和所有权仍需要验证邮件。

什么是 ReDoS 风险?+

设计不当的嵌套量词可能造成大量回溯。请限制输入、测试模式,并隔离不受信任的表达式。