正则表达式
实时高亮匹配、查看捕获组,内置邮箱 / 手机号 / 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 | 多行 | ^ $ 匹配每行边界 |
| s | dotAll | . 可匹配换行符 |
| u | Unicode | 启用 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 嫌疑并强制中断、给出提示,避免拖垮浏览器。日常小文本仍在主线程即时响应。