DevFormatLab

正则测试

实时匹配

实时测试正则表达式,匹配高亮、捕获分组与常用预设。

//
测试文本2 匹配
高亮结果
Sample dates: 2026-05-14, 2025-12-31, and not-a-date 99-99-99.
匹配项2
#1 @142026-05-14
#2 @262025-12-31

正则与测试文本不会离开你的浏览器。

什么是正则测试工具?

正则(正则表达式)测试工具让你在示例文本上实时构建并验证模式,避免了「改应用代码 → 重新部署 → 看日志确认是否匹配」这种慢得多的试错循环。正则是通用的文本处理语言——几乎每种现代编程环境都有自己的方言:JavaScript 的 RegExp、Python 的 re、Java 的 Pattern、Go 的 regexp、ripgrep、grep、sed、awk、Vim 的搜索、以及绝大多数编辑器的查找/替换。一个正则写偏一点(漏一个转义、忘了 g 标志、贪婪量词应写懒惰),代价就是它放过去的每一个 bug:从坏掉的日志解析器到过度严苛的校验器,到能直接造成数据丢失的全局替换。 DevFormatLab 的正则测试工具每次按键都会用浏览器原生 JavaScript RegExp 引擎对测试文本求值,因此你看到的结果与前端代码运行结果完全一致。每条匹配在测试文本中高亮显示,每个捕获分组(包括命名分组 (?<name>...))逐项列出;标准修饰符 g、i、m、s、u、y 都支持。内置预设库提供最常用的模式(邮箱地址、URL、日本邮编、ISO 8601 日期、IPv4、十六进制颜色),让你从一个真实可用的基线开始迭代,而不是从零起步。兼容性提示会标注 JavaScript、Java、Python 三者的差异——例如变长 lookbehind、Unicode 属性转义(\p{Nd}、\p{Script=Hiragana})、命名分组语法——避免你写一个本地正常但上服务器就崩的正则。所有内容都不上传:正则与测试文本始终在你的浏览器内,处理日志、客户邮箱、敏感 ID 都安全。

功能特性

  • 实时高亮,输入即匹配,无需点 Run
  • 每条匹配的捕获分组列表,含命名分组 (?<name>...)
  • 全部标准修饰符:g(全局)、i(忽略大小写)、m(多行)、s(dotAll)、u(Unicode)、y(粘性)
  • 预设:邮箱、URL、日本邮编、ISO 8601 日期、IPv4、十六进制颜色
  • JavaScript / Java / Python 兼容性差异提示
  • 匹配数统计 + 每条结果的 1 起始索引
  • 纯浏览器运行 —— 正则与测试文本不会离开你的设备

使用步骤

  1. 在正则输入框输入模式(不要带斜杠——输入 users\.\w+,而不是 /users\.\w+/)。
  2. 按需在 flags 框加修饰符:g 找全部匹配(而非只第一条)、i 忽略大小写、m 让 ^ $ 匹配每一行、s 让 . 跨越换行、u 启用完整 Unicode。
  3. 在右侧粘贴测试文本——或点击一个预设(邮箱、URL、日本邮编 等),一键加载可用的正则与示例文本。
  4. 匹配实时在测试文本中高亮;右侧 Matches 面板列出每条匹配的 1 起始索引与全部捕获分组(含命名分组)。
  5. 如果正则报「Invalid regular expression」,悬停可看到原因(nothing to repeat、unterminated group、invalid escape 等),无需离开页面就能修复。
  6. 上线前请查看兼容性提示:在 JavaScript 中可用的正则在 Java / Python 上可能有差异——例如变长 lookbehind 或 Unicode 属性转义。

常见问题

为什么我的正则只匹配到了第一处?

你忘了加 g 全局修饰符。没有它,RegExp.exec / String.match 只返回第一条结果。 // 错误——只找到一个 "cat" /cat/.test("cat cat cat") // 正确——遍历所有匹配 "cat cat cat".match(/cat/g) // ["cat","cat","cat"] 在本工具中,把 g 输入到正则旁边的 flags 框。右侧 Matches 面板会列出每条匹配并标注从 1 开始的索引。

为什么报「Invalid regular expression: nothing to repeat」?

量词(* + ? {n})需要前面有可重复的内容。常见原因是元字符没转义就出现在分组开头: /+1234/ ← + 前面没东西可以重复 /(?:)+/ ← 重复一个空分组 /5{1,3+}/ ← 量词内多了一个 + 把字面量转义即可:/\+1234/ 匹配 "+1234"。手机号建议写 /\+?\d{10,15}/。

如何匹配跨行内容?

两个不同的问题需要不同的修饰符: • m(多行):^ 和 $ 匹配每一行的开头/结尾,而不是整段字符串。逐行模式如 /^ERROR/m。 • s(dotAll):让 . 也能匹配 \n。当你希望一个模式跨越换行时使用,例如 /<pre>(.*?)<\/pre>/s。 在本工具中可以自由组合:日志抓取常用 gms。

为什么 \d 匹配不到日文 / 全角数字?

默认 \d 只匹配 ASCII 0-9,不包括 0-9。加上 u(Unicode)修饰符并用 Unicode 属性转义: /[\d\p{Nd}]/gu // 既能匹配 12,也能匹配 12 本工具支持 u;Java 需要 (?U),Python 的 stdlib re 不支持完整 Unicode 类,要用第三方 regex 包——兼容性面板会标出这些差异。

lookbehind 在 Safari / 旧 Node 上失效怎么办?

变长 lookbehind (?<=...) 在 V8 / SpiderMonkey 早已就绪,但 Safari < 16.4 与 Node 8.x 不支持。若必须兼容旧运行时: • 把 lookbehind 换成捕获分组:/(?<=USD )\d+/ → /USD (\d+)/,读 match[1] 即可。 • 或把 new RegExp 包在 try/catch 里,失败时降级为手动扫描。 本工具按你当前浏览器编译,这里失败说明生产也会失败——上线前请改写为捕获分组形式。

我的正则与测试文本会被上传吗?

不会。正则用 new RegExp(...) 编译后完全在浏览器内执行匹配。打开开发者工具的网络面板再点 Run,你不会看到任何新请求;默认也不会把正则写入 localStorage。

相关工具

Canonical: https://devformatlab.com/zh/regex-tester