免费在线正则表达式测试器
在浏览器中测试和调试 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() 时要谨慎重用。