文本处理

正则表达式测试器

把正则和测试文本放在同一个面板里,写一条规则、调几个标志位,立刻就能看到它在文本里落在哪里。命中位置、捕获分组、替换预览、拆分结果和潜在性能风险都会同步刷新,所有处理都在浏览器本地完成,不会把片段发往服务器。

  • 语法错误实时定位到列号,避免规则悄悄变成空匹配
  • 七个标志位(g、i、m、s、u、y、d)任意组合,覆盖大部分 JavaScript 场景
  • 命中高亮、捕获组、替换预览与拆分结果同步刷新
  • 内置常见模板和潜在 ReDoS 检测,可一键生成多语言代码片段
  • 正则、标志位和测试文本可以通过链接分享,复盘和协作更顺手
工具/正则表达式测试器
/
/g
常用模板
待命:请输入正则与测试文本

还没有命中。试着调整正则或标志位。

正则操作
标志位

功能简介

这不是只能跑一次 test() 的小工具,而是把模式调试、命中定位、替换预览、拆分结果与性能风险并排呈现,便于把规则一次性写对。

  1. 01

    语法错误实时定位

    使用 regexpp 解析正则,把错误信息和列号同步显示在输入框下方,避免规则悄悄失效。

  2. 02

    完整 flag 组合

    支持 g、i、m、s、u、y、d 七种标志位,命名与作用都给出说明,少猜常见缩写背后的含义。

  3. 03

    命中高亮与详情

    测试文本中的所有命中都会高亮,并按顺序列出起点、长度、捕获组与命名捕获,方便对照原文。

  4. 04

    替换与拆分预览

    同一条正则既能预览替换结果,也能查看 split 后的数组,调试日志、字段或 URL 时少切几次工具。

  5. 05

    性能风险提示

    后台调用 recheck 检测潜在的灾难性回溯,给出可触发的攻击样本,方便在上线前重写危险写法。

  6. 06

    多语言代码导出

    把当前正则与 flag 一键生成 JavaScript、TypeScript、Python、Go、PHP 与 Java 代码片段,粘回项目即可使用。

  7. 07

    分享链接复盘

    正则、标志位、测试文本和替换文本会压缩到 URL 哈希中,发给同事或贴进工单时不丢失上下文。

  8. 08

    完全本地处理

    解析、匹配、替换、ReDoS 检测都跑在当前浏览器会话内,调试敏感日志或内部接口也不会上传内容。

如何使用

写正则、看命中、调整 flag、复制代码或链接,整个流程都在同一个面板里。

  1. 01

    把正则写进顶部输入框,错误时下方会即时显示原因与列号。

  2. 02

    在 flag 栏点选需要的标志位,常用的 g、i、m 可以组合使用。

  3. 03

    把要测试的文本粘贴到下方的测试区,所有命中都会自动高亮。

  4. 04

    查看右侧匹配结果中的起点、长度与捕获组,确认规则落在预期位置。

  5. 05

    需要重写文本时切到替换标签,使用 $1、$<name> 或 $& 引用捕获内容。

  6. 06

    担心性能时关注右上角的 ReDoS 提示,遇到风险尽量改写量词或拆分规则。

  7. 07

    最后用复制字面量、导出代码或复制分享链接把结果带走。

功能说明

不同任务关心的指标并不一样,匹配数、捕获组、性能风险与代码片段都能在同一面板里随手对照。

  • g 标志位让规则覆盖全文,是验证一共命中多少处最常用的选项。
  • i 标志位适合英文混合大小写、日志关键字或品牌词等不区分大小写的场景。
  • m 标志位让 ^、$ 按行匹配,适合日志、Markdown 标题和按行组织的文本。
  • s 标志位让 . 跨行匹配,适合替换多行 HTML 片段或跨行注释。
  • u 标志位启用 Unicode 模式,处理 emoji、中文与 \u{...} 转义更可靠。
  • y 标志位让规则从 lastIndex 处开始匹配,适合手写词法分析或分块扫描。
  • d 标志位在每个匹配里返回捕获组的起止索引,便于在 UI 中精确高亮。
  • 匹配详情按顺序列出起点和长度,配合捕获组可以快速核对字段位置。
  • 替换面板支持 $1、$<name>、$&、$$ 等引用,便于按需重新拼接内容。
  • 拆分结果用数组形式呈现,便于检查日志、字段或 URL 的分段是否符合预期。
  • ReDoS 检测异步运行,遇到潜在风险会给出可复现的攻击字符串。
  • 导出代码会按目标语言的字面量规则做最少必要的转义,可直接复制使用。

适合哪些场景

调试正则时麻烦的从来不是想法,而是反复粘贴、来回切工具、上线后才发现规则漏写或回溯过深。

  1. 接口与日志字段提取

    从访问日志或接口返回里提取 IP、用户 ID、状态码、时间戳,可以用捕获组直接对照。

  2. 表单与输入校验

    在写校验规则前先把样本贴进来,确保邮箱、手机号、身份证或自定义编码格式真的能命中。

  3. 内容批量替换

    调试品牌名、链接、目录路径或敏感字段的替换规则,先看清命中再决定是否上线。

  4. SQL 与 SDK 代码迁移

    把旧接口签名、配置项或参数风格迁移到新版本,捕获组帮你保留原有动态片段。

  5. Markdown 与文档整理

    清理多余空行、统一链接形式、抽取段落或标题,便于把笔记导入新工具。

  6. 安全审查与脱敏

    把可能泄露的 token、邮箱、手机号识别出来,便于发布前脱敏或做合规检查。

  7. 配置与脚本调试

    Nginx、CI、Webhook、IDE 都依赖正则配置,先在测试器里跑通再贴回去更稳。

  8. 学习与教学

    把命中位置和分组逐一展开,适合给同事演示或自己记忆 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 中,加入书签或贴入笔记里复用。

更多相关工具

把规则调好后,可以直接用相邻的文本工具完成替换、行处理、清理和长度核对。