正则表达式在线测试 — JavaScript 正则匹配与替换
JavaScript 正则测试,支持标志、匹配高亮、分组表和替换预览
在浏览器中处理 · 不上传任何内容
功能简介
正则表达式很容易在细节上写错。输入模式和文本,这个工具会立即显示在哪里匹配、用颜色标出每个匹配,并列出每个匹配的位置和捕获组。再填写替换字符串,还能预览替换后的文本。
使用方法
- 输入模式,不需要两边的斜杠(从代码里粘贴的
/pattern/gi会被自动拆分成模式和标志),例如(\d+)-(?<word>[a-z]+)。 - 勾选需要的标志。默认开启查找所有匹配的
g。 - 粘贴测试文本。匹配会被高亮显示,表格列出每个匹配的位置和分组。
- 在替换框中使用
$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 不会被拆开。