工具

免费在线正则表达式测试器

在浏览器中测试和调试 JavaScript 正则表达式。实时查看高亮匹配、检查捕获组并预览替换结果。所有数据都不会发送到服务器。

标志
快速模式

匹配结果

所有匹配都在您的浏览器本地完成。您的模式和文本绝不会被上传、存储或记录。

什么是正则表达式?

正则表达式(regex)是一串定义搜索模式的字符。它不是查找某个固定字符串,而是描述您想匹配的文本的形态——数字、单词、电子邮件地址、日期等等。这使得模式匹配成为开发者、数据分析师和系统管理员最强大的工具之一,他们每天都用它来验证输入、搜索日志并快速可靠地转换文本。

JavaScript 正则标志详解

g global(全局)——查找字符串中的所有匹配,而不仅仅是第一个。
i case-insensitive(忽略大小写)——字母不区分大小写进行匹配。
m multiline(多行)——锚点 ^ 和 $ 匹配每一行的开头和结尾,而不仅是整个字符串。
s dotAll——点号 . 也能匹配换行符
u unicode——启用完整的 Unicode 匹配,包括 U+FFFF 以上的码点。

常用正则模式参考

模式 正则 匹配示例
电子邮件 /[^\s@]+@[^\s@]+\.[^\s@]+/ hello@charcount.app
网址 /https?:\/\/[^\s]+/ https://charcount.app
IPv4 /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/ 192.168.0.1
日期 (YYYY-MM-DD) /\d{4}-\d{2}-\d{2}/ 2026-06-30
十六进制颜色 /#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})\b/ #4338ca
UUID v4 /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab]…/i 9f1c…5b6c

正则捕获组

圆括号让您可以捕获匹配的一部分,以便提取或重用。共有三种类型:

  • ( ) — 捕获组:保存匹配内容,在替换中通过 $1、$2…… 访问。
  • (?: ) — 非捕获组:为选择或量词分组而不保存内容。
  • (?<name> ) — 命名组:用可读的名称捕获,通过 groups.name 访问。

例如,用三个组解析日期: (\d{4})-(\d{2})-(\d{2})

常见问题

.* 是贪婪的:它会匹配尽可能多的文本,必要时再回溯。.*? 是惰性的(非贪婪):它匹配尽可能少的文本,仅在被迫时才扩展。例如对文本 "<a><b>",模式 <.*> 匹配整个 "<a><b>",而 <.*?> 只匹配 "<a>"。当您想要尽可能短的匹配时(例如解析单个 HTML 标签),请使用惰性版本。

像 . ( ) [ ] { } + * ? ^ $ | \ 这样的字符在正则中有特殊含义,因此要按字面匹配它们,需要用反斜杠转义。写 \. 表示字面点号,\( 表示字面左括号,\\ 表示字面反斜杠。在字符类内部,例如 [.],这些字符大多失去特殊含义,无需转义。

大多数在线测试器默认使用 PCRE 引擎,而本工具和您的浏览器使用 JavaScript(ECMAScript)引擎,后者缺少某些功能。JavaScript 在较旧引擎中不支持后行断言、占有量词、递归或像 (?i) 这样的内联标志。请确保您的测试器设置为 JavaScript 风格,这样行为才能与您的代码一致。

g(全局)标志让正则查找字符串中的每一个匹配,而不是在第一个处停止。使用 matchAll() 或 replaceAll() 等方法,或用 replace() 替换所有出现时都需要它。没有 g,replace() 等方法只会更改第一个匹配。注意全局正则会保持 lastIndex 状态,因此在循环中调用 exec() 时要谨慎重用。