跳到主要内容

正则表达式语法速查

以下以 JavaScript 正则为主,可在 正则测试工具中尝试。PCRE、Python、Java、grep 和 sed 的语法及 Unicode 行为存在差异。

字符、数量与位置​

语法含义
.默认匹配换行符之外的字符
\d / \DASCII 数字 / 非数字
\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点号也匹配换行
uUnicode 模式
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 源码可用于修改和再分发。

返回开发运维速查目录