Regex Tester

Regex 测试器

构建与测试正则表达式 — 实时 match 高亮、capture group 解析、replace 模式预览。JavaScript 风格,完全在浏览器内运算。

JavaScript / ECMAScript regex(就是浏览器原生 RegExp 用的引擎)。它是 POSIX 的严格超集,常用功能也与 Python re、Java Pattern、PCRE 大量重叠。差异要注意:JavaScript 支持 lookahead/lookbehind、命名 group(/(?...)/),以及 /u、/y 旗标;但不支持 possessive 量词(a++、a*+)、原子分组((?>...))、与 branch-reset 分组 — 那些是 PCRE 特有。

不会。整个工具就是这个标签页里的 JavaScript。Pattern 编译、matching、replacement 全都用浏览器原生 RegExp 在本地执行。打开 DevTools → Network 观察:输入时不会发任何请求。可以放心粘贴线上日志、客户 email、或任何不该被服务器记录的内容。

/ /
Match 结果
Pattern 解析
Regex 速查表
. 任一字符(默认不含换行;加 /s 旗标时也包含换行)
\d 任一数字(0-9)
\D 非数字
\w Word 字符(a-z、A-Z、0-9、下划线)
\W 非 word 字符
\s 空白字符(空格、tab、换行)
\S 非空白
\b 单词边界
^ $ 字符串开头 / 结尾(加 /m 旗标时对应行首 / 行尾)
* 前一元素出现 0 次或多次
+ 前一元素出现 1 次或多次
? 前一元素出现 0 或 1 次(可选)
{n,m} 前一元素出现 n 到 m 次
(...) Capture group — 结果存到 $1、$2…
(?:...) 非捕获分组 — 用于分组但不捕获
(?<n>...) 命名 capture group — 替换时用 $<n> 引用
[abc] 字符类 — 任一个 a、b 或 c
[^abc] 否定字符类 — 任一个非 a、b、c 的字符
a|b 或关系 — 匹配 a 或 b
(?=...) 正向先行断言(lookahead)— 后面跟着
(?!...) 否定先行断言 — 后面不跟着
(?<=...) 正向后行断言(lookbehind)— 前面是
(?<!...) 否定后行断言 — 前面不是
$1 $<n> 替换字符串里的反向引用(backreference)— 数字或命名

为什么选 iKit Regex 测试器

为开发者打造的干净、快速 regex 游乐场 — 没有弹窗广告,也没有第三方追踪。

实时 match 高亮

输入 pattern 的同时,所有 match 实时在测试字符串里高亮显示。Capture group 也会列在旁边,清楚标出位置与内容。

Match + replace 一站搞定

切到 Replace 模式实时预览 String.replace 的输出,完整支持 $1/$2 数字反向引用、$ 命名 group、以及 $&(整个 match)。

支持全部 6 个 JavaScript 旗标

global、忽略大小写、multiline、dotall、unicode、sticky 都做成芯片切换 — 与原生 RegExp 完全一致,复制到代码里不会出意外。

常见模式示例

Email、URL、IPv4、电话、日期、十六进制颜色码、UUID 一键带入,每个示例都附测试字符串,让你直接看到实际 match 范围。

内置速查表

字符类、量词、锚点、分组、lookahead/lookbehind 一览 — 可折叠,需要时打开,平常收起来不挡路。

隐私至上的设计

Pattern、测试字符串、替换字符串都留在你的浏览器。可在 DevTools → Network 验证:输入时零网络请求。可放心测试线上日志与客户数据的 regex。

Regex 匹配的运作原理

正则表达式看起来像乱码,但它背后的引擎其实很简单。

  1. 1

    编译 pattern

    当你写下 /foo/,或调用 new RegExp('foo'),引擎会把 pattern 解析成一个内部自动机(automaton)— 一个能在输入文本上行走的状态机。编译只发生一次,后续匹配速度很快。

  2. 2

    在输入字符串上行走

    引擎在测试字符串上移动游标。在每个位置尝试走完自动机的路径:符合的字符同时前进两个游标,不符合就回溯到前一个分歧点换另一条路试。

  3. 3

    Capture group

    Pattern 里的括号开启一个 capture group:当引擎在括号内成功匹配时,会记住匹配到的内容,索引为 $1$2…。命名 group (?<n>...) 则用名称存储。这些 capture 出现在 match 对象的 groups 字段。

  4. 4

    用 backreference 替换

    String.replace(regex, replacement) 走相同的 match 路径,但不是返回结果,而是把替换字符串拼进去。替换字符串里的 $1 就是 group 1 抓到的内容 — 用一条 regex 就能把 2024-01-15 改成 15/01/2024

Regex 常见任务

你会在哪些情境下需要 regex 测试器?

验证 email / URL 格式

在测试器构建 pattern,粘贴样本(包括正常的边界情况),确认实际 match 范围后,再把它放进你的表单验证。Preset 提供了一个能涵盖 95% 真实输入的合理起点。

清理日志数据

日志里混杂时间戳、ANSI 颜色码、想脱敏的 IP?切到 Replace 模式,用 \b(?:\d{1,3}\.){3}\d{1,3}\b 配上 [REDACTED],先看预览再用 sed 跑真实文件。

用 regex 重构代码

IDE 的 find-and-replace 虽然支持 regex,但不会跨多条样本实时预览。先在 iKit 用真实代码片段构建并验证,确认 group 与替换无误后,再粘回 VS Code / IntelliJ。

抽取结构化数据

想从联系人导出文件抓出所有 email,或从收据里抽出每笔金额?在 iKit 建好 regex,复制到一行 script(text.matchAll(re)),临时的解析任务瞬间变成十行代码。

为什么本地 regex 测试很重要

Regex pattern 经常隐含敏感信息:客户 ID 结构、内部 API 路径、密码规则、或你正在试图脱敏的 PII 字段。把它们(以及搭配的真实测试数据)粘贴到别人的服务器,等于同时泄漏 pattern 与输入。iKit 的 regex 测试器只是已加载浏览器标签页的 JavaScript。

  • 匹配与替换期间零网络请求 — 可在 DevTools 验证。
  • Pattern 与测试字符串只存在浏览器内存;按 Clear 或刷新就清掉。
  • 可放心使用线上环境日志脱敏 pattern、客户数据验证、与安全敏感的 regex。

相关教程

来自 iKit 博客的深入教程与工具对比。

常见问题

支持哪一种 regex 语法?

JavaScript / ECMAScript regex(就是浏览器原生 RegExp 用的引擎)。它是 POSIX 的严格超集,常用功能也与 Python re、Java Pattern、PCRE 大量重叠。差异要注意:JavaScript 支持 lookahead/lookbehind、命名 group(/(?...)/),以及 /u、/y 旗标;但不支持 possessive 量词(a++、a*+)、原子分组((?>...))、与 branch-reset 分组 — 那些是 PCRE 特有。

我的 pattern 或测试字符串会被上传吗?

不会。整个工具就是这个标签页里的 JavaScript。Pattern 编译、matching、replacement 全都用浏览器原生 RegExp 在本地执行。打开 DevTools → Network 观察:输入时不会发任何请求。可以放心粘贴线上日志、客户 email、或任何不该被服务器记录的内容。

Replace 里 $1 跟 $<name> 有什么区别?

两者都是替换字符串里的反向引用。$1、$2… 对应 pattern 里 capture group 的顺序 — (foo)(bar) 会让 $1 = 'foo'、$2 = 'bar'。$ 对应命名 capture group(?...),可读性更高,而且 pattern 里 group 顺序变动时不会影响引用。JavaScript 也有 $&(整个 match)、$`(match 之前的字符串)、$'(match 之后的字符串)。

为什么我的 lookbehind 不能用?

Lookbehind (?<=...) 与 (?

如何匹配 emoji、带变音符号的字符或非拉丁文字?

打开 /u (unicode) flag,然后在 pattern 中使用 Unicode property escapes。`\p{L}` 可匹配任何字母 — 包括 ñ、é、中、ก、ا。`\p{N}` 可匹配任何数字,包括 ٠-٩ 这类非拉丁数字。`\p{Emoji}` 可匹配 emoji code points。不加 /u 时,同一个 pattern 在 surrogate pair emoji(BMP 之外的任何字符)上会悄无声息地匹配失败,并将带变音符号的字符当作分离的 base + combining marks 处理。/u flag 告诉引擎将你的输入解释为 Unicode code points,而不是原始的 UTF-16 code units — 一个开关即可消除大多数跨语言 regex bug。