正则表达式在线测试器

在线 ECMAScript 正则表达式测试器:实时匹配高亮、捕获组解析,内置邮箱、手机号、IP、中文字符等常用模板。所有正则在浏览器本地求值,不发送服务端。

最后更新:

//

常用正则模板

ECMAScript 正则核心语法速查

本工具求值的是浏览器原生 ECMAScript 正则。权威参考请见 MDN 正则表达式指南 ECMA-262 §RegExp 规范

字符类

  • . 任意字符(不含换行,除非 s flag)
  • \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 / PHPPython 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 引擎执行,没有服务端请求。