正则表达式

实时高亮匹配、查看捕获组,内置邮箱 / 手机号 / URL 等常用正则速查表

/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g
标志位
常用正则速查表(点击填入)
高亮预览0 个匹配
项目里程碑:
2026-06-17 发布 P1 阶段第一项(正则表达式工具)
2026-07-01 启动颜色工具
联系人邮箱:alice@example.com,电话 13800138000
官网 https://tools.openbong.cloud 已上线
匹配详情
暂无匹配

正则语法参考

正则表达式由普通字符元字符组成:普通字符匹配自身,元字符具有特殊含义。要匹配元字符的字面量,在前面加 \ 转义。本工具支持全部标志位、命名捕获组与零宽断言等现代 ECMAScript 正则特性。

字符与字符类

符号含义示例
.匹配任意单个字符(默认不含换行;勾选 s 标志后含换行)a.c → abc、axc
[abc]字符集合,匹配其中任意一个字符[aeiou] 匹配元音
[^abc]否定集合,匹配不在其中的任意字符[^0-9] 匹配非数字
[a-z]字符范围,可组合多个范围[a-zA-Z] 匹配所有字母
\d \D数字 / 非数字\d+ 匹配 123
\w \W单词字符(字母、数字、下划线)/ 非单词字符\w+ 匹配 hello_1
\s \S空白符(空格、制表、换行等)/ 非空白符\s+ 匹配连续空白

量词(重复次数)

符号含义示例
*0 次或多次ab*c → ac、abbc
+1 次或多次ab+c → abc、abbc
?0 次或 1 次(可选)colou?r → color、colour
{n}恰好 n 次\d{4} 匹配 4 位数字
{n,}至少 n 次\d{2,} 匹配 2 位及以上
{n,m}n 到 m 次\d{1,3} 匹配 1~3 位
*? +? ?? {n,m}?非贪婪(懒惰)模式,尽可能少地匹配<.*?> 最短匹配标签

锚点与边界(不消耗字符)

符号含义示例
^字符串开头;勾选 m 标志后匹配每行开头^Hello
$字符串结尾;勾选 m 标志后匹配每行结尾world$
\b单词边界(单词与空格 / 标点之间)\bcat\b 不匹配 category
\B非单词边界\Bcat 匹配 scattered 中的 cat

分组与反向引用

符号含义示例
(abc)捕获组,按左括号顺序编号为 $1、$2…(\d+)-(\d+) 取 $1、$2
(?:abc)非捕获组,不计入编号(?:ab)+ 重复 ab 不占编号
(?<name>abc)命名捕获组,通过 groups.name 取值(?<year>\d{4})
\1 \2反向引用第 n 个捕获组(匹配与之相同的内容)(\w)\1 匹配 aa、bb
\k<name>反向引用命名捕获组(?<x>\d)-\k<x> 匹配 5-5

零宽断言(环视,不消耗字符)

符号含义示例
(?=pattern)先行肯定:右侧必须匹配\d+(?=元) 匹配「100元」中的 100
(?!pattern)先行否定:右侧不能匹配\d+(?!元) 匹配后非「元」的数字
(?<=pattern)后行肯定:左侧必须匹配(?<=¥)\d+ 匹配「¥100」中的 100
(?<!pattern)后行否定:左侧不能匹配(?<!¥)\d+ 匹配前非「¥」的数字

四种断言的概念与区别详见页面底部 FAQ「什么是先行断言和后行断言」。

特殊字符转义

符号含义示例
\.匹配字面量「.」(让元字符还原为普通字符)example\.com
\( \)匹配字面量括号匹配 (1) 写作 \(\d+\)
\$匹配字面量美元符price\$10
\/ \|匹配字面量斜杠、竖线a\/b、a\|b

需转义的元字符:. ^ $ * + ? ( ) [ ] { } | / 以及反斜杠本身。本工具输入框直接写 \ 即可,无需像 JS 字符串那样双重转义。

标志位速查(对应上方开关)

标志名称说明
g全局匹配所有结果,而非首个
i忽略大小写大小写不敏感
m多行^ $ 匹配每行边界
sdotAll. 可匹配换行符
uUnicode启用 Unicode 码点模式
y粘滞从 lastIndex 精确匹配

常见问题

为什么我的正则不匹配?
常见三大原因:①没勾选 g 标志——不带 g 只返回第一个匹配,看起来像「只匹配了一处」;②默认正则大小写敏感——匹配大小写不一致的文本要勾选 i;③多行文本的 ^ $ 行为变了——不勾 m^ / $ 只匹配整个文本的首尾,要匹配每行边界需勾选 m。本工具会在编辑时实时显示当前生效的正则字面量,方便核对。
g 和 y 标志有什么区别?
g(global)从当前位置向后查找任意位置的匹配,找到后把 lastIndex 推进到匹配末尾继续。y(sticky / 粘滞)要求匹配必须从 lastIndex 精确开头,否则立即失败。通俗说:g 是「往下找」,y 是「就在这里找」。y 常用于词法分析器按位置精确切分 token。
如何匹配中文?
简单匹配单个中文字符用 [\u4e00-\u9fa5];匹配一段中文用 [\u4e00-\u9fa5]+。如果要用 Unicode 属性(如匹配所有汉字、所有字母),需要勾选 u 标志并写成 \p{Script=Han}+。注意:JavaScript 字符串中的反斜杠需要再转义一次(写 \\u),本工具直接在输入框写 \u 即可。
命名捕获组(?<name>...)和编号捕获组有什么区别?
编号捕获组 (...) 按左括号出现顺序编号($1、$2、$3...),改动正则顺序会让编号错位,可读性差。命名捕获组 (?<name>...) 给每组起名字,通过 match.groups.name 取值,与顺序解耦、自文档化,是现代正则的推荐写法。本工具在「匹配详情」里会同时显示编号组($1、$2)和命名组(按名字列出)。
贪婪匹配和非贪婪匹配有什么区别?
量词默认是贪婪的,会尽可能多地匹配字符。例如对 "<div>a</div><div>b</div>"<.*> 会一次性匹配整串(从首个 < 贪到末个 >)。在量词后加 ? 即变为非贪婪(懒惰)模式,尽可能少地匹配:<.*?> 会分别匹配两个标签。适用于 * + ? {n,m} 等所有量词。
什么是先行断言和后行断言(零宽断言)?
断言用于「检查某个位置是否满足条件」,本身不消耗字符(故称「零宽」)。四种形式:(?=pattern) 先行肯定(右侧必须匹配)、(?!pattern) 先行否定(右侧不能匹配)、(?<=pattern) 后行肯定(左侧必须匹配)、(?<!pattern) 后行否定(左侧不能匹配)。例如 \d+(?=元) 只匹配其后紧跟「元」的数字,但「元」不计入匹配结果。
为什么大文本匹配会单独异步处理?
某些正则在特定输入下会引发灾难性回溯(ReDoS),匹配耗时随输入长度指数增长,瞬间卡死页面。典型如 (a+)+b 匹配不以 b 结尾的 "aaaa...!"。本工具对超过 50KB 的测试文本自动转入 Web Worker 异步匹配,并设 3 秒超时——超时即判定为 ReDoS 嫌疑并强制中断、给出提示,避免拖垮浏览器。日常小文本仍在主线程即时响应。

相关工具