如何使用
- 01输入模式;面板立即编译,无效时显示解析错误。
- 02切换需要的标志:
g 全局、i 忽略大小写、m 多行 ^/$、s 点匹配换行、u Unicode、y 粘滞。 - 03粘贴测试文本,读取高亮、匹配计数和匹配表。
- 04用
$1、lt;name> 或 amp; 输入替换,预览转换后的文本。
计算读数
模式 (?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2}) 配合标志 g 作用于这段文本:
Order dated 2026-07-30 by dev@example.com, phone 13800138000,
amount $1,299.00, host 192.168.31.7, colour #1e90ff.
Second order 2027-01-05 from ops@sample.cn — see https://example.com/a?b=1
找到 2 个匹配:2026-07-30 在索引 12,分组为 2026 / 07 / 30;2027-01-05 在索引 128,分组为 2027 / 01 / 05。替换 lt;y>/lt;m>/lt;d> 预览出的日期为 2026/07/30 和 2027/01/05。去掉 g 标志,测试器只保留第一个匹配(计数 1),替换也只触及那一处——这个标志不是装饰。像 ( 这样的无效模式会报告 V8 的消息 "Invalid regular expression: /(/g: Unterminated group"。内置电子邮件模式会找到 dev@example.com 和 ops@sample.cn。
引擎实际做什么
测试器编译一个 JavaScript RegExp——ECMAScript 方言,而不是 PCRE——并用 exec 遍历文本,所以分组编号从 1 开始,amp; 表示整个匹配,命名组使用 (?<name>…)。量词默认贪婪(.* 尽可能多取),末尾的 ? 使其懒惰(.*? 尽可能少取)。标志改变的是匹配语义而不是模式:i 折叠大小写,m 让 ^/$ 按行生效,s 让 . 跨越换行,u 启用码点模式,y 把后续每个匹配锚定在前一个结束处。没有 g 时,测试器内部添加它以迭代,然后只报告第一个匹配——所以你看到的计数就是非全局 replace 会影响的数目。
限制与诚实假设
- 有界,但不安全。
- 守卫在 5,000 个匹配或匹配之间 1,500 ms 后停止,但单个进入指数级回溯的
exec 无法中断——恶意模式仍可能冻结标签页。请简化嵌套量词,而不是依赖上限。 - JavaScript 方言。
- 现代引擎支持后行断言,但不支持原子组、占有量词(
a++)和递归;在 PCRE 中可用的语法在这里可能失败。 - 模式不是解析器。
- 电子邮件模式匹配常见的
local@domain.tld 形式,而不是 RFC 5322 允许的每一个地址。
灾难性回溯是经典陷阱
(a+)+$ 作用于 30 个 a 后跟 b,划分前缀的方式数量巨大,引擎在失败前会全部尝试——看起来线性的模式可能花费指数时间。优先使用显式字符类([ab]+),锚定你的意图,避免嵌套量词。第二个陷阱是作用范围:除非开启 m,^ 和 $ 表示整个字符串的开头和结尾;除非开启 s,. 排除换行,所以在一行上有效的模式在三行上会悄悄失败。
它用在哪里
从日志行提取字段
为时间戳和请求 ID 写一个命名组模式,用几行真实数据核对匹配表,然后在代码中使用同一模式,并确信每个组的内容。
准备批量重命名或脱敏
用 $1/lt;name> 引用预览替换,在把任何破坏性操作跑起来之前统计受影响的匹配。
隐私
模式与测试文本在你的浏览器中处理;不会上传、存储或记录。
参考文献
- ECMA International, ECMA-262 — ECMAScript Language Specification, ecma-international.org (访问日期:2026-10-07)——规范性的 RegExp 语法与语义。
- MDN Web Docs, Regular expressions, developer.mozilla.org (访问日期:2026-10-07)——标志、组、量词和替换模式。
- IETF, RFC 5322: Internet Message Format, rfc-editor.org (访问日期:2026-10-07)——模式只能近似的真实地址语法。
- Wikipedia, ReDoS, en.wikipedia.org (访问日期:2026-10-07)——嵌套量词为何爆炸。
本页计算器
精选工具,点开即用;小工具可直接试算,数值会带入完整计算器。