正则表达式在线测试器
在线 ECMAScript 正则表达式测试器:实时匹配高亮、捕获组解析,内置邮箱、手机号、IP、中文字符等常用模板。所有正则在浏览器本地求值,不发送服务端。
最后更新:
//
常用正则模板
ECMAScript 正则核心语法速查
本工具求值的是浏览器原生 ECMAScript 正则。权威参考请见 MDN 正则表达式指南 与 ECMA-262 §RegExp 规范。
字符类
.任意字符(不含换行,除非sflag)\d数字 =[0-9]\w字母数字下划线 =[A-Za-z0-9_]\s空白:空格、Tab、换行[abc]字符集合 /[^abc]取反
量词
*0 次或多次+1 次或多次?0 次或 1 次{n}恰好 n 次 /{n,}至少 n 次- 量词后加
?改为非贪婪,如.*?
分组与引用
(...)捕获组(?:...)非捕获组(?<name>...)命名捕获\1反向引用第 1 个捕获组|或运算
锚点与断言
^行首 /$行尾\b单词边界(?=...)正向先行(?!...)负向先行(?<=...)正向后行 /(?<!...)负向后行
正则方言对照(ECMAScript vs PCRE vs Python)
正则表达式在不同语言/引擎之间并非完全可移植。常见差异:
| 特性 | ECMAScript(本工具) | PCRE / PHP | Python re |
|---|---|---|---|
| 后行断言可变长 | ✅(ES2018+) | ❌(仅定长) | ❌(Python < 3.12 仅定长) |
| 命名捕获语法 | (?<name>...) | (?P<name>...) / (?<name>...) | (?P<name>...) |
| Unicode property | \p{...} 需 u flag | 原生支持 | 需 regex 第三方库 |
| 条件分组 | ❌ | ✅ (?(cond)yes|no) | ✅ |
| 占有量词 | ❌ | ✅ *+ / ++ | ✅(Python 3.11+) |
匹配位置 d flag | ✅(ES2022+) | ✅(PREG_OFFSET_CAPTURE) | 通过 .span() |
| 注释/扩展模式 | ❌ | (?x) | (?x) / re.VERBOSE |
进阶用法实例
命名捕获 + 解构
const { groups: { year, month, day } } =
/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/.exec('2026-05-30')!;后行断言(提取数字但不要单位)
/(?<=¥)\d+/.exec('单价¥199') // → ['199']Unicode property(匹配中日韩字符)
/\p{Script=Han}+/gu.exec('Hello 世界 World') // → ['世界']非贪婪 vs 贪婪
'<b>x</b><b>y</b>'.match(/<b>.*<\/b>/) // 贪婪:整段 '<b>x</b><b>y</b>' '<b>x</b><b>y</b>'.match(/<b>.*?<\/b>/g) // 非贪婪:['<b>x</b>', '<b>y</b>']
性能与安全:避免灾难性回溯(ReDoS)
嵌套量词与重叠选择会让 NFA 引擎在最坏输入下进入指数级回溯(catastrophic backtracking), 这是 Web 应用经典的 DoS 攻击面,被收录在 OWASP ReDoS。
- 危险模式:
(a+)+$、(a|a)*、^(a+)+b—— 输入aaaaaaaaaaaaaaa!(不匹配末位)就能让某些引擎卡数秒。 - 修复方向:把重叠的选择改写为互斥;用
^\w+$替代^(\w+)+$;尽量锚定(^/$);优先字符类([a-z]+)而非分组重复。 - 服务端校验:对用户提供的正则始终设置超时(Node 没有原生超时,可借助 worker 或
re2引擎)。 - 工程实践:在 CI 中使用 safe-regex 或 ESLint 的 no-control-regex 规则进行静态检查。
权威参考
常见问题
本工具使用哪种正则方言?
使用浏览器内置的 ECMAScript RegExp,与 JavaScript / TypeScript 中的 new RegExp 行为一致。与 PCRE、Python re、POSIX 正则在部分语法上不兼容。
支持哪些 flags?
g 全局、i 忽略大小写、m 多行、s dotAll、u Unicode 都已暴露在 UI。y(sticky)与 d(hasIndices)可手动输入到 flags 框中。
为什么我的中文字符匹配不到?
ECMAScript 中 \w 只匹配 ASCII 字母数字下划线,匹配中文请用 [\u4e00-\u9fa5] 或开启 u flag 后使用 \p{Script=Han}。
贪婪 vs 非贪婪有什么区别?
.* 会尽可能多地匹配(贪婪),.*? 会尽可能少地匹配(非贪婪)。处理 HTML 标签等带边界的场景常用非贪婪。
数据会被上传吗?
不会。正则与测试字符串完全在浏览器内通过 RegExp 引擎执行,没有服务端请求。