正则表达式测试器
把正则和测试文本放在同一个面板里,写一条规则、调几个标志位,立刻就能看到它在文本里落在哪里。命中位置、捕获分组、替换预览、拆分结果和潜在性能风险都会同步刷新,所有处理都在浏览器本地完成,不会把片段发往服务器。
- 语法错误实时定位到列号,避免规则悄悄变成空匹配
- 七个标志位(g、i、m、s、u、y、d)任意组合,覆盖大部分 JavaScript 场景
- 命中高亮、捕获组、替换预览与拆分结果同步刷新
- 内置常见模板和潜在 ReDoS 检测,可一键生成多语言代码片段
- 正则、标志位和测试文本可以通过链接分享,复盘和协作更顺手
还没有命中。试着调整正则或标志位。
功能简介
这不是只能跑一次 test() 的小工具,而是把模式调试、命中定位、替换预览、拆分结果与性能风险并排呈现,便于把规则一次性写对。
- 01
语法错误实时定位
使用 regexpp 解析正则,把错误信息和列号同步显示在输入框下方,避免规则悄悄失效。
- 02
完整 flag 组合
支持 g、i、m、s、u、y、d 七种标志位,命名与作用都给出说明,少猜常见缩写背后的含义。
- 03
命中高亮与详情
测试文本中的所有命中都会高亮,并按顺序列出起点、长度、捕获组与命名捕获,方便对照原文。
- 04
替换与拆分预览
同一条正则既能预览替换结果,也能查看 split 后的数组,调试日志、字段或 URL 时少切几次工具。
- 05
性能风险提示
后台调用 recheck 检测潜在的灾难性回溯,给出可触发的攻击样本,方便在上线前重写危险写法。
- 06
多语言代码导出
把当前正则与 flag 一键生成 JavaScript、TypeScript、Python、Go、PHP 与 Java 代码片段,粘回项目即可使用。
- 07
分享链接复盘
正则、标志位、测试文本和替换文本会压缩到 URL 哈希中,发给同事或贴进工单时不丢失上下文。
- 08
完全本地处理
解析、匹配、替换、ReDoS 检测都跑在当前浏览器会话内,调试敏感日志或内部接口也不会上传内容。
如何使用
写正则、看命中、调整 flag、复制代码或链接,整个流程都在同一个面板里。
- 01
把正则写进顶部输入框,错误时下方会即时显示原因与列号。
- 02
在 flag 栏点选需要的标志位,常用的 g、i、m 可以组合使用。
- 03
把要测试的文本粘贴到下方的测试区,所有命中都会自动高亮。
- 04
查看右侧匹配结果中的起点、长度与捕获组,确认规则落在预期位置。
- 05
需要重写文本时切到替换标签,使用 $1、$<name> 或 $& 引用捕获内容。
- 06
担心性能时关注右上角的 ReDoS 提示,遇到风险尽量改写量词或拆分规则。
- 07
最后用复制字面量、导出代码或复制分享链接把结果带走。
功能说明
不同任务关心的指标并不一样,匹配数、捕获组、性能风险与代码片段都能在同一面板里随手对照。
- g 标志位让规则覆盖全文,是验证一共命中多少处最常用的选项。
- i 标志位适合英文混合大小写、日志关键字或品牌词等不区分大小写的场景。
- m 标志位让 ^、$ 按行匹配,适合日志、Markdown 标题和按行组织的文本。
- s 标志位让 . 跨行匹配,适合替换多行 HTML 片段或跨行注释。
- u 标志位启用 Unicode 模式,处理 emoji、中文与 \u{...} 转义更可靠。
- y 标志位让规则从 lastIndex 处开始匹配,适合手写词法分析或分块扫描。
- d 标志位在每个匹配里返回捕获组的起止索引,便于在 UI 中精确高亮。
- 匹配详情按顺序列出起点和长度,配合捕获组可以快速核对字段位置。
- 替换面板支持 $1、$<name>、$&、$$ 等引用,便于按需重新拼接内容。
- 拆分结果用数组形式呈现,便于检查日志、字段或 URL 的分段是否符合预期。
- ReDoS 检测异步运行,遇到潜在风险会给出可复现的攻击字符串。
- 导出代码会按目标语言的字面量规则做最少必要的转义,可直接复制使用。
适合哪些场景
调试正则时麻烦的从来不是想法,而是反复粘贴、来回切工具、上线后才发现规则漏写或回溯过深。
-
接口与日志字段提取
从访问日志或接口返回里提取 IP、用户 ID、状态码、时间戳,可以用捕获组直接对照。
-
表单与输入校验
在写校验规则前先把样本贴进来,确保邮箱、手机号、身份证或自定义编码格式真的能命中。
-
内容批量替换
调试品牌名、链接、目录路径或敏感字段的替换规则,先看清命中再决定是否上线。
-
SQL 与 SDK 代码迁移
把旧接口签名、配置项或参数风格迁移到新版本,捕获组帮你保留原有动态片段。
-
Markdown 与文档整理
清理多余空行、统一链接形式、抽取段落或标题,便于把笔记导入新工具。
-
安全审查与脱敏
把可能泄露的 token、邮箱、手机号识别出来,便于发布前脱敏或做合规检查。
-
配置与脚本调试
Nginx、CI、Webhook、IDE 都依赖正则配置,先在测试器里跑通再贴回去更稳。
-
学习与教学
把命中位置和分组逐一展开,适合给同事演示或自己记忆 lookbehind、捕获等概念。
使用建议
正则容易看起来对,但真正稳的写法依赖几条朴素的纪律。
- 先用尽量短的样本验证规则,再放大到完整文本,能更早暴露边界问题。
- 量词后面尽量加锚点或边界,避免一条规则把多余内容贪婪地吃进来。
- 一旦出现连续可重叠的量词(如 (a+)+),先看 ReDoS 提示,必要时拆分写法。
- 换语言执行前,注意各语言对反斜杠、回溯引用、命名捕获的差异,导出代码只是起点。
- 替换前保留一份原文,尤其在 g 标志位、大规模文本或破坏性替换中。
- 分享链接里包含测试文本,敏感数据请先脱敏或换成示例后再发出。
边界与注意事项
这条工具按 JavaScript 正则的能力实现,并不代表所有引擎的最终行为。
- 语法解析与执行依赖浏览器原生 RegExp,PCRE、Python、Go、Java 等引擎存在细节差异。
- 导出的代码片段只做必要的字面量转义,复杂正则在目标语言中仍需复核。
- \b 词边界基于 ASCII 字母数字,处理中文或全角字符时可能不符合预期,建议改用 lookaround。
- ReDoS 检测有默认超时时间,复杂正则可能未能给出确定结论,仍建议人工评估。
- 匹配数量在 UI 中最多展示 1000 处,超出部分仍会参与统计但不再逐条呈现,避免界面卡顿。
- 本工具不替代真实环境下的性能压测,也不保证正则在所有数据规模下的行为完全一致。
常见问题
关于标志位、捕获组、性能风险与代码导出,这里整理了几个比较常被问到的点。
我写的正则在这里能命中,但放到 Python / Go 里却不行?
不同语言的正则引擎对反向引用、Unicode 类、命名捕获、lookbehind 等支持程度不同。本工具按 JavaScript RegExp 实现,导出代码只是参考,跨语言落地前建议用目标语言再跑一次。
为什么开启 g 之后只显示了一部分命中?
为了避免极长文本导致 UI 卡顿,匹配详情默认展示前 1000 处。整体命中数量仍然准确,超过的部分只是不再逐条列出。
什么时候应该开启 u 或 v?
当正则里出现 Unicode 类、\u{...}、Emoji 或 \p{...} 时,建议开启 u。本工具目前提供 u 标志位;如果你的浏览器支持 v(Unicode Sets),可以在导出代码里继续手动调整。
为什么有时候 ReDoS 提示一直显示检测中?
recheck 在浏览器里有时间预算,遇到复杂正则可能超出默认时长。可以简化写法、减少嵌套量词,或换更小的样本再试。
替换里 $1、$<name>、$& 都怎么用?
$& 代表整段匹配,$1、$2 等对应编号捕获组,$<name> 对应命名捕获组。如果想保留字面 $,写两个连续的 $$ 即可。
分享链接会把测试文本一起带出去吗?
会。链接通过 lz-string 压缩后写入 URL 哈希,包含正则、标志位、替换文本和测试文本。涉及敏感内容时请先脱敏。
为什么测试文本里有零宽匹配会卡住?
零宽匹配(如 ^、(?=...)、\b)可能在某些写法下被反复触发,本工具会自动检测并跳过,避免死循环,同时在状态栏给出提示。
这个工具适合处理多大的文本?
一般几万到十几万字符没问题,更大的文本建议拆段处理,因为高亮和匹配会随长度线性变慢。
为什么我开启 g 标志位后替换依然只换了一处?
替换执行使用的是你设置的标志位,请确认 g 已勾选。如果仍只命中一处,可能是规则只能匹配一次,尝试放宽量词或锚点。
能识别命名捕获组吗?
可以。命名捕获 (?<name>...) 会出现在命名捕获一栏,并可以在替换里用 $<name> 引用。
正则会上传到服务器吗?
不会。解析、匹配、替换、ReDoS 检测都跑在你当前的浏览器里,关闭页面之后就不会留下任何记录。
我能保存常用的正则吗?
可以使用复制分享链接,把当前正则、flag 和测试文本压缩到 URL 中,加入书签或贴入笔记里复用。
更多相关工具
把规则调好后,可以直接用相邻的文本工具完成替换、行处理、清理和长度核对。