# 正则表达式测试 - 在线 Regex 匹配与高亮工具

> 免费在线正则表达式测试工具：实时高亮所有匹配，列出捕获分组和命名分组，支持 g/i/m/s/u 标志，可直接粘贴 /…/gi 写法，回溯失控会自动停止，本地运行不上传。

- 网址: https://qilingtools.com/zh/regex
- 分类: 开发工具 (https://qilingtools.com/zh/dev)
- 标签: [开发](https://qilingtools.com/zh/tags/dev), [前端网页](https://qilingtools.com/zh/tags/frontend)
- 最后更新: 2026-11-07
- 价格: 免费，无需注册
- 隐私: 在浏览器本地处理，文件不上传服务器

实时测试 JavaScript 正则表达式：输入正则和测试文本，所有匹配立即在文本里高亮，并逐条列出位置和捕获分组。命名分组显示名字（$1 <year>），没参与匹配的分组和匹配到空字符串的分组分开标出；\b、^、(?=…) 这类零宽匹配用竖线标出位置。从 JS 代码里复制的 /hello/gi 整段粘贴进来会自动拆成正则和标志。匹配在后台线程里运行，写出 (a+)+ 这种会疯狂回溯的正则，超过 1.5 秒会自动停止并提示原因，页面不会卡死。支持 g、i、m、s、u 五个标志，全部在浏览器本地运行，文本不上传。

## 使用步骤

1. 输入正则表达式，或者把代码里的 /…/flags 整段粘贴进来，标志会自动勾上
2. 在测试文本框粘贴要匹配的内容
3. 看高亮结果和下面的分组列表；不勾选「全局 g」时只找第一处
4. 提示回溯太多时，改掉嵌套量词或缩短文本再试

## 功能特点

- 实时高亮所有匹配，零宽匹配用竖线标出位置
- 列出每处匹配的位置和捕获分组，命名分组显示名字
- 区分「未参与匹配」和「空字符串」两种空分组
- 粘贴 /…/gi 写法自动拆成正则和标志
- 匹配在后台线程运行，超过 1.5 秒自动停止，页面不会卡死
- 支持 g/i/m/s/u 标志，语法错误即时提示，本地运行不上传

## 常见问题

### 用的是哪种正则语法？和 Python、Java、PHP 一样吗？

是 JavaScript（ECMAScript）语法，和浏览器、Node.js 完全一致，常用部分（字符类、量词、分组、断言、反向引用）和其他语言基本相同。在当前 Chrome 上实测，几处常见差别：Python 的命名分组 (?P<name>…) 会报错，要写成 (?<name>…)；开头写 (?i) 打开忽略大小写会报错，要勾选 i 标志，或用 (?i:…) 只作用于一段；占有量词 a++ 和原子组 (?>…) 都不支持；JS 支持任意长度的向后断言 (?<=a+)，这点比 Python、Java 宽松。

### \A、\Z、\p{…} 为什么不报错却匹配不到？

不勾选 u 标志时，JS 把不认识的转义当成字母本身：\A 就是字母 A，所以 \Aabc\Z 匹配不到 abc，反而能匹配 AabcZ（实测如此）；\p{Script=Han} 也会被当成字面的 p{Script=Han}。JS 里用 ^ 和 $ 表示开头结尾。勾选 u 后，\p{Script=Han} 能匹配汉字（「祈灵tools中文😀」里匹配到 4 个），\A 这类无效转义则会直接报错，更容易发现写错。

### 为什么 . 匹配不到换行，\w 匹配不到中文？

. 默认不匹配换行符，要跨行匹配请勾选「点匹配换行 s」；^ 和 $ 默认只认整段文本的开头结尾，要按行匹配请勾选「多行 m」，实测 ^\w$ 在 a 换行 b 里不勾 m 是 0 处、勾上是 2 处。\w 只包括英文字母、数字和下划线，不包括汉字，匹配中文请用 [\u4e00-\u9fa5]，或者勾选 u 后用 \p{Script=Han}。表情符号在 JS 里占两个单位，不勾 u 时 ^.$ 匹配不到一个 😀，勾上 u 才能。

### 提示「回溯太多，已停止」是怎么回事？

有些正则遇到匹配不上的文本时，会把所有拆分方式试一遍，耗时成倍增长，俗称灾难性回溯。实测 (a+)+$ 去匹配「一串 a 加一个 b」：20 个 a 用 16 毫秒，22 个用 52 毫秒，24 个用 189 毫秒，每多两个字母约慢 4 倍，40 个 a 要算几个小时。本工具在后台线程里匹配，超过 1.5 秒就停掉并提示，页面不会卡。常见原因是嵌套量词，如 (a+)+、(\w+\s?)*、(.*)*，改成不嵌套的写法通常就能解决。同样的正则放进服务端代码，也可能被恶意输入拖垮（ReDoS）。

### 命名分组、未参与匹配是什么意思？

分组列表里每个括号对应 $1、$2……，写成 (?<year>\d{4}) 的命名分组会显示为 $1 <year>，替换时可以用 $<year> 引用。「未参与匹配」表示这个分组所在的分支没有走到，比如 (a)|(b) 匹配到 b 时第 1 组就是这样，在代码里它的值是 undefined；「空字符串」表示分组参与了但匹配到 0 个字符，比如 a(b*)c 匹配 ac。这两种在代码里的判断方式不同，所以分开显示。

### 粘贴 /abc/gi 会怎样？想匹配斜杠本身怎么办？

从 JS 代码里复制的整段 /…/标志 粘贴进正则框时，工具会把斜杠里面的部分当作正则、后面的字母勾成标志，并提示拆开了什么；本工具不支持的 y、d、v 标志会提示已忽略。只有整段粘贴时才拆开，手动输入的 /api/ 仍按字面匹配斜杠，实测在「GET /api/users」里能找到 1 处。

### 匹配很多时会显示全部吗？

最多列出 10000 处匹配，超过时会提示后面还有更多没有显示（实测 2 万个字符用 . 匹配，显示前 10000 处并给出提示）。要统计更多，可以把文本分段测试，或者在代码里直接运行。

### 文件会上传服务器吗？

不会。所有处理都在你的浏览器本地完成，没有任何网络上传，关闭页面即清除。

### 需要注册或付费吗？

不需要。本站完全免费，无需注册登录，没有次数限制。

## 相关工具

- [JSON 格式化](https://qilingtools.com/zh/json): 免费在线 JSON 格式化：一键美化、压缩，实时语法校验并定位到出错行列，支持树形视图折叠、键名排序、转义与去转义、Unicode 转中文、复制下载，数据不上传。
- [Base64 编解码](https://qilingtools.com/zh/base64): 免费在线 Base64 编码解码工具：文字、图片和任意文件转 Base64，Base64 还原成文字或文件；支持中文 UTF-8 和 GBK、Data URI、URL 安全写法，解出图片可预览下载，本地处理不上传。
- [URL 编解码](https://qilingtools.com/zh/url-encode): 免费在线 URL 编码解码工具：把中文、空格和特殊符号转成 %E4%BD%A0 这样的百分号编码，或者把乱码一样的链接还原成文字。支持单个参数和整条网址、UTF-8 和 GBK、+ 号表示空格，本地实时转换不上传。
- [JWT 解析](https://qilingtools.com/zh/jwt): 免费在线 JWT 解析工具：解码 Header 与 Payload，显示是否过期；填入密钥或公钥（PEM、JWK、JWKS）即可校验签名，本地处理不上传。
- [时间戳转换](https://qilingtools.com/zh/timestamp): 免费在线 Unix 时间戳转换工具：时间戳与日期互转，自动识别秒/毫秒，显示本地时间、UTC、ISO 8601 和相对时间，实时更新。
- [哈希计算](https://qilingtools.com/zh/hash): 免费在线哈希计算工具：对文本或文件一次算出 MD5、SHA-1、SHA-256、SHA-384、SHA-512，粘贴官网校验值自动比对，几 GB 的大文件分块计算，本地完成不上传。
- [UUID 生成](https://qilingtools.com/zh/uuid): 免费在线 UUID 生成器：用浏览器的加密安全随机数批量生成 UUID v4（GUID）或按时间排序的 v7，可大写、去连字符、加花括号，一次最多 100 个，一键复制，本地生成不联网。
- [进制转换](https://qilingtools.com/zh/base-convert): 免费在线进制转换工具：二进制、八进制、十进制、十六进制及任意 2–36 进制互转，自动识别 0x/0b/0o 前缀和空格、下划线分隔，超大整数不丢精度，本地实时计算。
