正则与模式匹配

正则表达式测试器查看每个捕获组

填写表达式本体,不加 / 分隔符。不删除空格或换行;空表达式合法。

正则表达式测试器

表达式

填写 (cat) 这样的表达式本体,把 g 放到单独的标志字段,不要粘贴 /cat/g。工具不主动修剪文本;编辑器或剪贴板可能规范化换行,因此这里不是逐字节保真的文件测试。

测试文本

结果

等待输入或手动测试。

所有匹配均在浏览器本地独立线程执行,不上传表达式或测试文本。

选项

每个标志只能出现一次,u 与 v 互斥。不加 g 时,匹配、替换和提取仅处理首项。

当前浏览器支持:正在检测浏览器…
  • d — 返回捕获位置。
  • g — 查找全部匹配,拆分不受影响。
  • i — 按 JavaScript 规则忽略大小写。
  • m — 使 ^ 与 $ 匹配行边界。
  • s — 使点号包含行终止符。
  • u — 启用 Unicode 语法与码点匹配。
  • v — Unicode 集合模式,与 u 互斥。
  • y — 粘连匹配,仅从 lastIndex 处开始;每次运行初始为 0。

浏览器身份:正在检测浏览器…。这是浏览器报告的用户代理,不是准确的引擎版本。

UTF-16 单位上限:文本 100000,表达式 2000,替换文本 10000,替换输出 1000000,完整报告 4000000。结果最多 10000 项;超限整次失败。单次超时 2 秒。

等待输入或手动测试。

仅当前有效、Unicode 完整且不超过 100000 个 UTF-16 单位的替换结果可回写。先预览再应用,撤销可恢复输入、参数和结果。

验证成功不等于捕获字段正确。正则表达式测试器把整体命中与编号、命名捕获组放在一起,让你在替换日期或提取日志字段前确认实际取到了什么。

进行正则表达式在线测试时,先用真实的小段输入检查正则匹配,再观察正则替换是否改到了预期位置。捕获组未参与与捕获空串也会分别保留,避免丢失重要差别。

为什么用正则表达式测试器

让模式与结果对应

确认真正捕获的字段

正则表达式测试器将整体匹配和内部捕获分开显示。结合编号、名称与 UTF-16 位置,可以核对取到的是完整记录还是其中一个字段。

整体匹配包住两个彩色捕获片段,箭头分别连接下方的两个详情卡片。

比较首项与全局替换

同一个替换模板,在开启与关闭 g 时会产生不同结果。先比较仅首项与全部命中,再预览并应用,原文不会在调参数时直接被覆盖。

两排替换对比:第一排只修改首项,第二排修改全部三项。

让模式与结果对应

01

保留真实表达式

填写 (cat) 这样的表达式本体,把 g 放到单独的标志字段,不要粘贴 /cat/g。工具不主动修剪文本;编辑器或剪贴板可能规范化换行,因此这里不是逐字节保真的文件测试。

  • 先选示例,再预览并应用其中的输入变更。
02

选择执行方式

用 cat 测试 cat cat,再关闭 g,匹配列表会从两项变成一项。默认编辑后等待 350ms 自动执行,也可关闭自动后按 Ctrl/Cmd+Enter。拆分不遵循只处理首项的规则。

  • 每个标志只能出现一次,u 与 v 互斥。不加 g 时,匹配、替换和提取仅处理首项。
03

检查完整导出

导出前先在详情中区分 null 与 "":前者代表组未参与,后者代表捕获了空串。列表每次增加 50 项,但完整 JSON 报告包含全部成功结果,不受当前显示页影响。

  • 仅当前有效、Unicode 完整且不超过 100000 个 UTF-16 单位的替换结果可回写。先预览再应用,撤销可恢复输入、参数和结果。

四种文本检查方式

匹配与捕获

对 (Ada) (Lovelace),整体命中是 Ada Lovelace,组 1 与组 2 则分别保存两个字段。开启 d 可查看分组范围;后行断言的捕获也可能位于整体范围之外。

替换预览

用 (?<year>\d{4})-(?<month>\d{2}) 与 $<month>/$<year>,可把 2026-09 预览为 09/2026。先比较开启 g 与仅首项的差别,再决定是否回写原文。

指定分组提取

对 ID:(\d+),选择组 1 可从 ID:42 提取 42,选择 0 则保留 ID:42。有匹配时,不存在的分组会报错;没有匹配时不检查组名是否存在。

带捕获组的拆分

用 (,) 拆分 a,b 会得到 ["a", ",", "b"],捕获的分隔符仍然保留。(,)|(;)这类备选分组还会因未参与的捕获产生 null;结果不会自动过滤空串。

引擎行为与限制

仅浏览器 JavaScript
这里只执行当前浏览器的原生 JavaScript RegExp。PCRE 和 Python 模式需要到对应运行时验证。支持的标志现场检测;报告中的浏览器用户代理不是准确的引擎版本。
空匹配与 Unicode
空文本和空表达式均合法;首次进入与清空后保持待输入状态。全局零宽匹配在 u/v 下按码点前进,否则按 UTF-16 单位前进。位置从 0 起算,以 UTF-16 单位计数,结束位置不包含在内。分组位置需开启 d;后行断言的捕获可位于整体匹配之外。
有上限的完整结果
UTF-16 单位上限:文本 100000,表达式 2000,替换文本 10000,替换输出 1000000,完整报告 4000000。结果最多 10000 项;超限整次失败。单次超时 2 秒。
保留字符串的导出
完整 JSON 报告转义字符串,可以保留孤立代理项。只有替换结果的 Unicode 完整时才提供 TXT。带引号预览可能仅显示前 20000 个 UTF-16 单位,成功导出仍包含全部输出。
有限解释与可撤销修改
这里只提供有限的词法提示,不是完整解析、AI 解释或性能分析。遇字符类、不熟悉的转义或复杂结构时,剩余后缀整体标记为未解释。仅当前有效、Unicode 完整且不超过 100000 个 UTF-16 单位的替换结果可回写。先预览再应用,撤销可恢复输入、参数和结果。

关于正则表达式测试器

可以切换哪些匹配标志?

支持当前浏览器识别的 d、g、i、m、s、u、v、y。每种只能写一次,u 与 v 不能同时开启。正则表达式测试器会显示实际支持情况,遇未知标志直接报错。

替换时如何引用分组?

用括号捕获目标内容,再用 $1、$2 或 $<name> 在替换文本中引用。$& 表示完整匹配;空替换文本可以删除命中内容,左侧原文只有经过预览并应用才改变。

测试文本是否会上传?

不会上传。表达式、测试文本及四种操作均在浏览器 Worker 中处理;页面不提供公开分享、读取 URL 或上传文件入口。关闭页面前可自行保存报告。

Python 和 Java 的表达式能在这里测试吗?

本页只执行浏览器原生 JavaScript RegExp,不执行 Python、Java 或 PCRE。基础模式可能相同,高级分组、转义与 Unicode 规则需要在目标运行时再次验证。

为什么只有第一处匹配?

匹配、替换、提取未开启 g 时仅处理首个结果。开启 g 才遍历更多匹配;拆分是例外,它按原生 split 语义处理全部文本,且会把捕获组插入结果。

还有疑问?

开始使用正则表达式测试器

用正则表达式测试器载入日期或 Unicode 示例,再替换成自己的文本。

带走结果前核对完整 JSON 报告,需要修改原文时再确认应用。

默认编辑后停顿 350ms 自动运行。关闭自动后可点击测试或按 Ctrl/Cmd+Enter。任何输入变化都会立即禁用过期结果导出。