正则表达式在线测试 — 实时测试 JavaScript 正则
用示例文本测试正则表达式,实时高亮匹配结果,显示捕获组并预览替换效果。免费,在浏览器中运行。
Contact us at hello@freetoolsforweb.com or sales@example.org. Site: https://freetoolsforweb.com/tools — call (416) 555-0199. Launched 2026-09-08, colours #244b3f and #fff, server 10.0.0.12.
| # | 匹配 | 索引 | 分组 |
|---|---|---|---|
| 1 | hello@freetoolsforweb.com | 14 | — |
| 2 | sales@example.org | 43 | — |
分享链接会以相同的表达式、标志、测试文本和替换内容打开此测试器。它们存储在链接的 # 之后,浏览器从不会将这部分发送到服务器。
完全在浏览器中运行。你输入的任何内容都不会发送给我们或被存储。 浏览全部免费工具.
发现问题,或者觉得哪里可以更好?每条消息我们都会阅读,并尽快修复。
这款免费的正则表达式测试工具在浏览器中用你的示例文本运行 JavaScript 正则表达式,并在你输入时高亮显示每个匹配。每个匹配都会列出捕获组、命名组和匹配位置;替换模式会按照 String.replace 的实际行为,预览使用 $1 和 $<name> 的替换结果。复制分享链接,任何打开链接的人都会看到相同的正则、标志和测试文本;我们的正则表达式速查表中的每个示例也都以同样方式在这里打开。
使用的是你浏览器自身的引擎,所以结果与 Node.js、React、Deno 以及所有 Web 框架完全一致;与 PCRE(PHP、Python 的 re、grep -P)相近,但不完全相同。下面列出了最重要的差异——后行断言支持、占有量词和 \A 锚点——免得在这里能用的正则到了别处让你措手不及。
使用方法
- 输入正则表达式(不带两侧的斜杠),或点击一个预设(邮箱、URL、电话、日期、IPv4、十六进制颜色),从一个已验证可用的正则开始。
- 勾选需要的标志。g 查找所有匹配而不只是第一个;i 忽略大小写;m 让 ^ 和 $ 匹配每行的开头和结尾。
- 粘贴测试文本。匹配会立即高亮,表格会逐一列出每个匹配及其捕获组。
- 打开“替换”预览替换效果。用 $1 引用编号组,用 $<name> 引用命名组,用 $& 引用整个匹配。
- 在 JavaScript 字面量中使用时复制为 /pattern/flags,正则来自字符串时复制为 new RegExp()。
- 点击“复制分享链接”,把整套设置发给同事。状态保存在链接的 # 之后,所以对方打开时不会发送到任何服务器。
常见问题
这里使用的是哪种正则方言?
ECMAScript(JavaScript),因为正则是由浏览器直接执行的。Node.js、前端代码和 JSON Schema 中的 pattern 用的都是它。Python、Java、Go、PHP 和 grep 各有自己的引擎,基础部分一致,边缘部分有差异;任何不寻常的正则,上线前都要在目标语言中测试。
为什么我的正则只找到第一个匹配?
因为没有开启 g(全局)标志。没有它,JavaScript 会在第一个匹配处停止,这对校验来说是对的,对提取来说就不对了。开启 g 即可列出所有匹配。
如何跨多行匹配?
有两个不同的标志,作用各不相同。m(多行)让 ^ 和 $ 匹配每一行的开头和结尾。s(dotAll)让 . 也能匹配换行符。如果不用 s 又想匹配“包括换行在内的任意内容”,惯用写法是 [\s\S]*。
什么是命名捕获组?
(?<year>\d{4}) 以 year 为名捕获四位数字,这样你就可以读取 match.groups.year,而不用数括号,在替换中也可以用 $<year> 引用它。命名组让长正则更易读,在增删其他分组时也不会出错。
正则表达式会很慢甚至有危险吗?
会。带有嵌套量词(如 (a+)+)或相互重叠的分支的正则,在某些输入上可能耗费指数级时间(灾难性回溯,这是真实存在的拒绝服务攻击手段)。如果某个正则让本页面卡死,那它同样会让你的服务器卡死。优先使用具体的字符类而不是 .*,并避免嵌套量词。
应该用正则表达式校验邮箱地址吗?
只能粗略校验。这里的预设能匹配常见格式并拒绝明显的拼写错误,这也正是表单该做的全部事情。完全符合 RFC 5322 的正则长达数千个字符,而且仍然无法告诉你邮箱是否存在。先检查格式,再发送一封确认邮件。
正则表达式简明速查
• . 除换行外的任意字符 · \d 数字 · \w 单词字符 · \s 空白字符 · \b 单词边界
• * 零次或多次 · + 一次或多次 · ? 可选 · {n,m} n 到 m 次 · 在以上任一量词后加 ? 变为非贪婪
• [abc] 其中任一 · [^abc] 都不是 · [a-z] 范围 · (x|y) 分支 · (?:x) 非捕获组
• ^ 开头 · $ 结尾 · (?=x) 先行断言 · (?!x) 否定先行断言 · (?<=x) 后行断言(JavaScript 和 PCRE 支持,并非所有引擎都支持)
• 用反斜杠转义特殊字符:\. \? \( \[ \\
JavaScript 与 PCRE:你真正会遇到的差异
JavaScript 没有占有量词(a++)、没有原子组、没有 \A 或 \Z 锚点(改用不带 m 标志的 ^ 和 $),行内修饰符只支持在 ES2025 中加入的限定范围写法 (?i:...);写在正则开头、不限定范围的 (?i) 会导致语法错误。开启 u 标志时,它支持后行断言、命名组以及 \p{L} 这样的 Unicode 属性转义。Python 的 re 在不使用 regex 包时还缺少 \p{...},Go 的 RE2 则完全不支持环视。如果一个正则必须在多种语言中运行,请只用公共子集:字符类、简单分组、锚点以及贪婪或非贪婪量词。
相关免费工具
- 正则表达式速查表 — 每个正则表达式语法元素都附可运行的示例,标明在 JavaScript、PCRE/PHP、Python、Go、Java 和 .NET 中的支持情况,并提供一键在正则测试工具中试用的链接。
- JSON 格式化 — 格式化、压缩和校验 JSON,解析错误精确到行和列。在浏览器中运行,无需上传。
- Base64 编码 / 解码工具 — 把文本或文件编码为 Base64,把图片转成带 CSS 和 <img> 代码片段的 data URI,还能把 Base64 解码回可预览的文件。数据不会离开你的浏览器。
- 字数统计 — 统计词数、字符数、句数和阅读时间,输入时实时检查 X、LinkedIn、Instagram、YouTube、SEO 和短信的字数限制。