工具介绍
正则表达式(regex)是一种查找、校验和提取文本的紧凑模式语言:邮箱模式可以校验表单输入,\d{4}-\d{2}-\d{2} 能找出日期,捕获分组则提取你需要的部分。几乎所有编程语言和编辑器都支持正则。
本工具使用 JavaScript 正则引擎——与 Node.js 和所有浏览器中运行的完全相同——所以在这里调试好的模式,放进你的 JavaScript/TypeScript 代码中行为完全一致。大多数模式在 Python、Java、Go 中也无需修改。
为什么使用它?
- 实时反馈:边输入模式,匹配结果边用黄色高亮。
- 逐个显示捕获分组——清楚看到 $1、$2 会是什么内容。
- 完整标志支持:g(全部匹配)、i(忽略大小写)、m(多行)、s(点号匹配换行)、u(Unicode)。
- 模式有语法错误时给出清晰的错误提示。
- 免费且私密——模式和文本都不离开浏览器。
使用方法
- 在两个 / 之间输入你的正则模式(不需要自己转义斜杠)。
- 在第二个 / 后面的小框中调整标志——默认 g 表示找出全部匹配。
- 在下方粘贴测试文本。
- 匹配即时高亮;捕获分组列在下面。
- 模式无效时会显示具体的错误原因。
示例
输入
模式: (\w+)@(\w+)\.com
测试文本: Contact alice@example.com or bob@test.com输出
✓ 2 个匹配
#1 分组: $1=alice $2=example
#2 分组: $1=bob $2=test圆括号创建捕获分组,替换操作中可用 $1、$2 引用。
实用技巧
- 校验邮箱输入?^[^\s@]+@[^\s@]+\.[^\s@]+$ 是个宽松版本,能挡住明显的输入错误,但完整符合 RFC 5322 标准得靠专门的库,不是一行正则能搞定的。
- 从 URL 里提取查询参数:用 [?&]([^=]+)=([^&]*) 配合 g 标志,直接读每个匹配的 $1/$2,比手写按 & 和 = 拆分靠谱。
- 打算把模式用进 .replace() 里?先在这里测——高亮的部分就是 .replace() 会替换的部分,捕获分组也一样准。
- 解析多行日志(比如匹配每行开头的时间戳)时记得加 m 标志,这样 ^ 和 $ 才是按行锚定,而不是锚定整个字符串。
- 从 Python 或 PHP 抄来的模式在这里不匹配?看看是不是用了 (?P<name>...) 命名分组——JavaScript 的写法是 (?<name>...),没有 P——或者占有量词(++、*+),这两个 JavaScript 正则都不支持。
JavaScript 正则测试,不是通用测试
本工具跑的是 JavaScript 内置的 RegExp 引擎——和你在浏览器控制台或 Node.js 脚本里写 str.match(pattern)、pattern.test(str) 用的是同一套代码。这和很多“通用”正则测试工具默认的 PCRE(PHP 常用)或 Python 的 re 模块不一样:JavaScript 没有占有量词、没有原子组,命名捕获分组的写法是 (?<name>...),不是 PCRE/Python 的 (?P<name>...)。
如果你打算把正则用进 JS 或 TypeScript 代码——表单校验、路由匹配、日志解析——在这里测试就意味着零方言差异:页面上高亮的内容,就是运行时 new RegExp(pattern, flags) 会匹配到的内容,分毫不差。
在实际工作流中的位置
单独测正则的场景很少见。常见顺序是:先在这里确认模式没问题,再在代码里跑真正的 .replace(),最后对比替换前后的文本,确认改动符合预期、没有误伤。
用捕获分组提取结构化数据,往往下一步就是拼进 JSON——把提取结果格式化一下,检查解析出来的形态对不对。
常见问题
这个工具用的是哪种正则方言?
JavaScript(ECMAScript),即所有浏览器和 Node.js 内置的引擎。核心语法各语言通用,但个别特性有差异——比如 Python 和 Java 的后行断言支持和命名分组语法略有不同。
为什么只匹配到第一个结果?
缺少 g(全局)标志。没有 g 时正则找到第一个匹配就停止。本工具默认带 g——检查是否被删掉了。
为什么 . 匹配不到换行?
默认情况下 . 匹配除换行外的任意字符。加上 s 标志(dotall)让 . 也匹配换行,或者用 [\s\S] 这个通用写法。
捕获分组结果是什么意思?
模式中每对圆括号会捕获它匹配到的文本。$1 是第一组,$2 是第二组,以此类推——替换和提取代码中引用的就是它们。
为什么我的正则很慢甚至卡死?
很可能是灾难性回溯,由 (a+)+ 这类嵌套量词在不匹配的输入上引起。重写模式避免有歧义的重复。本工具最多显示 1000 个匹配以保持流畅。