在线正则表达式测试工具让你输入正则表达式、粘贴示例文本,并实时看到匹配项高亮——无需 IDE,无需终端,无需一次次提交代码反复试错。调试一个”差点儿就对了”的正则是开发中最让人抓狂的体验之一;交互式测试工具把这个过程变成清晰可见的操作。
为什么用在线正则测试工具?
正则表达式以难以凭记忆阅读和调试著称。在线工具提供:
- 即时反馈 — 输入时实时看到哪些文本被匹配
- 标志位控制 — 一键切换
g、i、m、s标志,无需改代码 - 捕获组查看 — 精确显示每个
()分组捕获了什么内容 - 安全迭代 — 在不影响生产代码的情况下反复实验
正则标志位
标志位改变模式的匹配行为,理解它们能避免最常见的正则 bug:
| 标志 | 含义 |
|---|---|
g | 全局 — 查找所有匹配,而非只找第一个 |
i | 忽略大小写 — [A-Z] 同时匹配 [a-z] |
m | 多行 — ^ 和 $ 匹配每行的开头和结尾 |
s | 点号全匹配 — . 也匹配换行符 |
u | Unicode — 启用完整 Unicode 匹配 |
d | 索引 — 返回捕获组的起止位置索引 |
最常见的错误:期望找到多个匹配时忘记加 g 标志。
正则核心语法
字符类
\d — 任意数字 [0-9]
\D — 任意非数字
\w — 单词字符 [a-zA-Z0-9_]
\W — 非单词字符
\s — 空白字符(空格、制表符、换行)
\S — 非空白字符
. — 任意字符(除换行,加 s 标志后包含换行)
[abc] — 字符类:a、b 或 c
[^abc] — 否定类:除 a、b、c 以外的任意字符
[a-z] — 范围:小写 a 到 z
[a-zA-Z] — 范围:任意字母
量词
* — 0 个或多个(贪婪)
+ — 1 个或多个(贪婪)
? — 0 个或 1 个(可选)
{3} — 恰好 3 个
{3,} — 3 个或更多
{3,6} — 3 到 6 个(含边界)
*? — 0 个或多个(懒惰/非贪婪)
+? — 1 个或多个(懒惰/非贪婪)
贪婪 vs 懒惰:<.+> 作用于 <a>foo</a> 会匹配整个字符串。<.+?> 分别匹配 <a> 和 </a>。
锚点
^ — 字符串起始(加 m 标志后为行首)
$ — 字符串结尾(加 m 标志后为行尾)
\b — 单词边界
\B — 非单词边界
分组与捕获
(abc) — 捕获组:将 "abc" 捕获为第 1 组
(?:abc) — 非捕获组:分组但不捕获
(?<name>abc) — 命名捕获组:通过 groups.name 访问
(a|b) — 交替:匹配 "a" 或 "b"
前瞻与后顾
(?=abc) — 正向前瞻:其后紧跟 "abc"
(?!abc) — 负向前瞻:其后不跟 "abc"
(?<=abc) — 正向后顾:其前紧跟 "abc"
(?<!abc) — 负向后顾:其前不跟 "abc"
环视匹配的是位置,不消耗字符,不会包含在匹配结果中。
常用正则模式
邮箱地址验证
^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$
覆盖常见场景。完全符合 RFC 5321 的邮箱正则极其复杂,生产环境建议用库或简单格式检查加确认邮件的组合方案。
URL 匹配
https?:\/\/[^\s/$.?#].[^\s]*
匹配 http:// 和 https:// URL。需要更严格验证时:
^(https?:\/\/)([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,}(\/[^\s]*)?$
IPv4 地址
^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$
验证每个字节在 0–255 范围内。
语义化版本号(semver)
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z\-][0-9a-zA-Z\-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z\-][0-9a-zA-Z\-]*))*))?(?:\+([0-9a-zA-Z\-]+(?:\.[0-9a-zA-Z\-]+)*))?$
完整支持预发布标签和构建元数据。
ISO 8601 日期
^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$
匹配 YYYY-MM-DD 格式,带基本范围校验。
从文本中提取数字
-?\d+(?:\.\d+)?
匹配整数和小数(可带负号),适合解析日志输出或配置文件。
十六进制颜色值
#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})\b
同时匹配 3 位(#fff)和 6 位(#ffffff)十六进制颜色。
日志行解析
^(?<timestamp>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2})\s+(?<level>ERROR|WARN|INFO|DEBUG)\s+(?<message>.+)$
使用命名捕获组,从非结构化日志行中提取结构化数据。
各语言中使用正则
JavaScript
// 基本匹配
const email = 'user@example.com';
const pattern = /^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$/;
console.log(pattern.test(email)); // true
// 提取所有匹配(需要 g 标志)
const text = '价格:¥12.50、¥199、¥0.99';
const prices = text.match(/¥\d+(?:\.\d{2})?/g);
// ['¥12.50', '¥199', '¥0.99']
// 命名捕获组
const log = '2026-04-07T14:23:01 ERROR 连接被拒绝';
const logPattern = /^(?<ts>\S+)\s+(?<level>\w+)\s+(?<msg>.+)$/;
const { ts, level, msg } = log.match(logPattern).groups;
// 替换(使用反向引用)
const camelToSnake = str => str.replace(/([A-Z])/g, '_$1').toLowerCase();
camelToSnake('camelCaseString'); // 'camel_case_string'
Python
import re
# 搜索并提取
text = "订单 #12345 下单时间 2026-04-07"
m = re.search(r'#(\d+)', text)
if m:
print(m.group(1)) # '12345'
# 查找所有匹配
emails = re.findall(r'[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}', text)
# 命名分组
pattern = re.compile(
r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})'
)
m = pattern.search(text)
print(m.group('year'), m.group('month'), m.group('day'))
# 替换
result = re.sub(r'\b(\w+)\b', lambda m: m.group().upper(), 'hello world')
# 'HELLO WORLD'
Go
import "regexp"
// 编译一次,复用
emailRe := regexp.MustCompile(`^[\w.%+\-]+@[\w\-]+\.[a-zA-Z]{2,}$`)
fmt.Println(emailRe.MatchString("user@example.com")) // true
// 查找所有匹配
re := regexp.MustCompile(`¥\d+(?:\.\d{2})?`)
matches := re.FindAllString("价格:¥12.50 和 ¥199", -1)
// ["¥12.50", "¥199"]
// 命名子匹配
re = regexp.MustCompile(`(?P<year>\d{4})-(?P<month>\d{2})`)
match := re.FindStringSubmatch("2026-04")
names := re.SubexpNames()
// 遍历 names 将名称映射到匹配值
常见正则错误
忘记转义特殊字符 — .、*、+、?、(、)、[、]、{、}、^、$、|、\ 都是元字符。要匹配字面量点号,需要写 \.。
贪婪量词用错场景 — <.+> 会从第一个 < 匹配到最后一个 >。改用 <.+?> 才能逐个匹配标签。
JavaScript 中忘加 g 标志 — string.match(/pattern/) 不带 g 只返回第一个匹配。需要所有匹配时加 g。
多行文本中不加 m 标志就用 ^ 和 $ — 不加 m 时,^ 只匹配整个字符串的起始,不匹配每行行首。
灾难性回溯 — (a+)+ 这类模式在长的不匹配字符串上会导致指数级时间复杂度。避免在重叠字符类上嵌套量词。
过度工程化邮箱验证 — 完全符合 RFC 规范的邮箱正则超过 6000 个字符,仍然无法阻止所有无效邮箱。格式检查加确认邮件才是正确方案。
立即在线测试你的正则
ZeroTool 的正则测试工具提供分屏编辑器——左侧写模式,右侧粘贴示例文本。匹配项实时高亮,捕获组在下方展示,标志位一键切换。
无需安装。无速率限制。全程运行在你的浏览器中。