博客
简体中文

正则表达式在线测试 — JavaScript 正则匹配与替换

JavaScript 正则测试,支持标志、匹配高亮、分组表和替换预览

在浏览器中处理 · 不上传任何内容

标志

功能简介

正则表达式很容易在细节上写错。输入模式和文本,这个工具会立即显示在哪里匹配、用颜色标出每个匹配,并列出每个匹配的位置和捕获组。再填写替换字符串,还能预览替换后的文本。

使用方法

  1. 输入模式,不需要两边的斜杠(从代码里粘贴的 /pattern/gi 会被自动拆分成模式和标志),例如 (\d+)-(?<word>[a-z]+)。
  2. 勾选需要的标志。默认开启查找所有匹配的 g。
  3. 粘贴测试文本。匹配会被高亮显示,表格列出每个匹配的位置和分组。
  4. 在替换框中使用 $1、$<name> 或 $& 查看结果并复制。想删除所有匹配,就开启 显示替换结果,并让替换框留空。

工作原理

  • 标志:g 全局匹配,i 忽略大小写,m 让 ^ 和 $ 按行生效,s 让 . 匹配换行符,u 启用 Unicode 模式,y 只在当前位置匹配(粘连模式)。
  • 不加 g 时只返回第一个匹配。同时使用 g 和 y 时,只能找到一个紧接一个、中间没有间隔的匹配。
  • 空匹配(a*、^、空模式)会让位置前进一个字符后继续搜索;开启 u 时每次前进一个完整的码点。
  • 替换语法与 String.prototype.replace 相同:$$、$&、$`、$'、$1 到 $99 以及 $<name>。
  • 保护措施:最多 1,000 个匹配,文本最长 200,000 个字符,模式最长 5,000 个字符,运行时间上限 1.5 秒。这个上限通过在 Web Worker 中执行匹配并在超时后终止它来实现,因此主页面永远不会卡死。

示例

模式 标志 文本 结果
\d+ g a1 b22 c333 1、22、333
[一-龥]+ g abc 中文 test 测试 中文、测试
a* g baac 4 个匹配,位置分别为 0、1(aa)、3 和 4
(?<y>\d{4})-(\d{2}) 2024-05 第 1 组 y = 2024,第 2 组 = 05

补充说明

  • [一-龥] 能匹配常用汉字(基本区);开启 u 标志后,可以用 \p{Script=Han} 匹配所有汉字,用 \p{Emoji_Presentation} 匹配 emoji。
  • 你的模式和文本永远不会发送到服务器。

常见问题

用的是哪种正则语法?

使用浏览器自带的 JavaScript(ECMAScript)正则引擎,所以有些地方与 Python、PCRE 或 Java 的语法不同。不支持占有量词和 (?i) 这样的内联标志,命名分组写作 (?<name>...)。

模式运行时间过长会怎样?

匹配在独立的 Web Worker 中进行,超过 1.5 秒就会被终止。(a+)+$ 这类嵌套重复,在输入稍长一点时就可能呈指数级变慢(灾难性回溯)。出现这种情况时会显示提示,页面依然可以正常操作。

匹配数量和文本长度有限制吗?

最多显示前 1,000 个匹配,文本最长 200,000 个字符,模式最长 5,000 个字符。超出时列表会被截断,或改为显示提示。

能匹配空字符串的模式会陷入死循环吗?

不会。空匹配之后,搜索位置(lastIndex)会向前移动一个字符,所以循环一定会结束。开启 u 标志时会跨过一个完整的码点,emoji 不会被拆开。

没找到想要的工具?