正则表达式语法速查
以下以 JavaScript 正则为主,可在 正则测试工具中尝试。PCRE、Python、Java、grep 和 sed 的语法及 Unicode 行为存在差异。
字符、数量与位置
| 语法 | 含义 |
|---|---|
. | 默认匹配换行符之外的字符 |
\d / \D | ASCII 数字 / 非数字 |
\w / \W | 常见单词字符(以 ASCII 字母、数字、下划线为主)/ 其反集 |
\s / \S | 空白 / 非空白 |
[abc] / [^abc] | 集合 / 排除集合 |
[a-z] | 字符范围 |
? / * / + | 0 或 1 次 / 任意次 / 至少 1 次 |
{n} / {n,m} | 恰好 n 次 / n 到 m 次 |
*? / +? / {n,m}? | 尽量少匹配,但仍满足完整表达式 |
^ / $ | 输入开头 / 结尾;m 模式下也匹配行边界 |
\b | 单词字符与非单词字符的边界 |
\w 和 \b 不能直接当作中文分词规则。Unicode 属性转义如 \p{L} 需要 u 或 v 模式,并取决于引擎支持。
分组与断言
| 语法 | 含义 |
|---|---|
(abc) | 捕获组 |
(?:abc) | 非捕获组 |
(?<name>abc) | 命名捕获组 |
a|b | 匹配分支 a 或 b |
\1 | 引用第一个捕获组 |
(?=abc) / (?!abc) | 后面必须匹配 / 不匹配 |
(?<=abc) / (?<!abc) | 前面必须匹配 / 不匹配 |
断言检查位置,本身不消费字符。后行断言在旧运行环境中可能不可用。
标志与替换
| 标志 | 含义 |
|---|---|
g | 全局匹配 |
i | 忽略大小写 |
m | 多行锚点 |
s | 点号也匹配换行 |
u | Unicode 模式 |
y | 从 lastIndex 指定位置粘连匹配 |
const text = 'host=api port=8080';
const match = /host=(?<host>\S+) port=(\d+)/.exec(text);
console.log(match.groups.host); // api
console.log(match[2]); // 8080
console.log('2026-11-05'.replace(/(\d{4})-(\d{2})-(\d{2})/, '$3/$2/$1'));
// 05/11/2026
JavaScript 替换字符串中,$& 是整个匹配,$1 是第一组,$<name> 是命名组,$$ 是字面的美元符号。
转义与常见误区
const literal = /\d+\.\d+/;
const fromString = new RegExp('\\d+\\.\\d+');
字符串构造需要同时处理字符串转义和正则转义。带 g 或 y 的正则对象在 test()、exec() 后会更新 lastIndex,复用时要留意状态。嵌套量词和大量回溯可能阻塞处理,先限制输入长度再用接近匹配的长文本验证。
常见校验场景见 常用正则示例。
来源与许可
本页由 Jacob’s Wiki 于 2026-11-05 对 IT-Tools 原文作中文摘译、重组和补充,保留常用操作,并非逐行全译。原文归 IT-Tools 项目贡献者所有。
本页译文与改编内容按 GNU GPL 3.0 提供,不附带担保;本站 Markdown 源码可用于修改和再分发。