跳到正文

在线测试正则表达式

在浏览器中测试 JavaScript 正则表达式,实时高亮匹配结果,查看捕获组,并获得通俗易懂的中文解释。

JavaScript(ECMAScript)正则风格与浏览器、Node.js 和 Deno 使用相同的引擎
//g

$1 或 $<name> 插入分组,$& 插入整个匹配,$` 和 $' 插入匹配前、后的文本,$$ 表示美元符号。

匹配和捕获组会显示在这里。

在浏览器中运行 · 无需上传工作原理

正则表达式测试 使用方法

  1. 1

    输入表达式

    输入正则表达式,不需要加斜杠;标志在下方的开关中选择。

  2. 2

    添加测试文本

    粘贴要搜索的文本,匹配结果会随输入实时高亮,并连同捕获分组一起列出。

  3. 3

    查看解释

    打开“解释”,用通俗的语言逐个了解词元,看清表达式实际的作用。

  4. 4

    预览替换结果

    在“替换为”中使用 $1 或 $<name> 输入替换内容查看结果,再到“代码”标签页复制代码。

限制与 Pro

免费使用,无需注册:最多统计 100,000 个匹配,高亮 2,000 个,表格列出 200 个;高亮支持最长 200,000 个字符的测试文本,每次运行 1.5 秒后会被中止。

Pro 可去除广告;各套餐下的测试功能完全相同。 了解 Pro

关于 正则表达式测试

本工具使用浏览器内置的 JavaScript(ECMAScript)正则表达式引擎运行你的表达式,Node.js、Deno、Bun 和所有网页用的都是同一套引擎,所以在这里能匹配的内容,放进你的代码里同样能匹配。输入表达式和测试文本后,每个匹配都会随输入实时高亮,并显示位置表、编号分组和命名分组;开启 d 标志后,还能看到每个分组的起止位置。

八个标志都可以开关:g 匹配全部结果,i 忽略大小写,m 让 ^ 和 $ 按行生效,s 让点号也匹配换行,u 启用完整 Unicode 和 \p{…} 属性转义,v 启用 Unicode 集合,支持在方括号内做交集和差集,y 为粘性匹配,d 用于生成索引。“替换”区域可预览 String.prototype.replace 的结果,支持 $1、$<name>、$& 等替换标记,“代码”标签页则给出对应的字面量、matchAll 和 RegExp() 代码片段。

“解释”标签页会把表达式拆成一个个词元,用通俗的中文说明每个词元的作用,包括分组、环视、字符类、量词,以及贪婪还是懒惰。“速查表”可以把常用词元插入到光标处。

匹配在后台 Web Worker 中运行,限时 1.5 秒。像 (a+)+b 对一长串 a 这样会发生灾难性回溯的表达式,会被中止并给出说明,不会卡死标签页。为 PCRE、Python 或 .NET 编写的表达式可能需要修改:JavaScript 中没有占有量词、原子组、递归,也没有 \A 和 \Z。

隐私

表达式和测试文本只保留在当前浏览器标签页中:匹配在本地 Web Worker 里完成,你输入的任何内容都不会被上传、记录或保存,因此可以放心用真实的日志行或客户数据来测试。

功能

真正的 JS 引擎

匹配行为与浏览器和 Node.js 中的 RegExp 完全一致,包括 v 标志的集合和命名分组。

逐词元解释

每个分组、字符类、锚点和量词都用通俗的语言说明。

回溯保护

匹配在 Worker 中运行,限时 1.5 秒,有问题的表达式不会让页面卡死。

正则表达式测试:常见问题

这个测试器使用哪种正则风格?
使用 JavaScript 的正则,即 ECMAScript 标准定义、由你当前浏览器实现的版本。它支持后行断言、命名分组、Unicode 属性转义和 v 标志,但不支持占有量词、原子组、递归、条件等 PCRE 特性。Python 的 (?P<name>…) 在这里要写成 (?<name>…)。
为什么我的表达式只找到第一个匹配?
不带 g 标志时,JavaScript 在第一个匹配后就会停止:exec 和 match 只返回一个结果,replace 也只替换第一处。开启 g 即可查找并替换所有匹配。粘性标志 y 则不同,它只在上一个匹配结束的确切位置匹配,适合写词法分析器。
什么是灾难性回溯?
当表达式能以多种方式匹配同一段文本时,比如 (a+)+ 或 (.*)* 这样的嵌套量词,一旦匹配失败,引擎会尝试所有组合,耗时随输入长度呈指数增长。这里会在 1.5 秒后中止并给出提示。解决办法是让各分支互斥,例如在逗号前用 [^,]* 代替 .*。
如何在替换中使用捕获分组?
编号分组写 $1、$2 等,命名分组写 $<name>,例如 (?<year>\d{4})。$& 插入整个匹配,$` 插入匹配之前的文本,$' 插入之后的文本,$$ 表示字面的美元符号。点击“试试示例”会载入一个日期表达式,用这种方式调整年月日的顺序。
什么时候需要使用 u 或 v 标志?
文本包含表情符号等基本多文种平面之外的字符时用 u,这样点号和量词会把它们当作一个字符,也才能使用 \p{L} 这类 Unicode 属性。较新的 v 标志包含 u 的全部功能,并支持方括号内的集合运算,例如 [\p{L}--[a-z]] 表示非 ASCII 字母。两个标志不能同时使用。