交互式正则速查表,JS / Python / PCRE 各方言一站查询。
- 本地处理
- 分类 开发运维
- 适合 格式化、校验、压缩或检查和代码相关的文本。
\d任意十进制数字(0-9)。JS 加 /u 标志后,也匹配 Unicode 数字。
order 42 items
\D任意非数字字符。
abc 123 def\w"单词"字符:ASCII 字母 / 数字 / 下划线。JS 默认不识别 Unicode 字母。
hello_world 42!
\W非单词字符。
hi, world!
\s任意空白:空格、Tab、换行等。
one two three four
\S非空白字符。
a b c
.除换行外的任意字符(加 /s 标志后含换行)。
a
b[abc]列出的任一字符(此例:任意元音)。
regex is fun
[^abc]不在列表中的任意字符(反向类)。
regex is fun
[a-z]字符范围。多个范围可合并:[a-zA-Z0-9]。
AB cd EF\p{L}Unicode 属性:任意字母(任意 script)。JS 需开 /u 标志。
abc αβγ 中文\P{L}Unicode 属性取反:非字母的任意字符。JS 需开 /u。
a1 中.x\p{N}Unicode 属性:任意数值字符,含非 ASCII 数字与数码。
a1 二 Ⅻ ½\p{Lu}Unicode 属性:任意大写字母。小写为 \p{Ll}。JS 需开 /u。
Hello WORLD abc\p{Han}Unicode script 属性:汉字(CJK)。JS 用 \p{Script=Han} 配 /u。
⚠ 不支持此方言: JavaScript
汉字 mixed カナ\h水平空白(空格、Tab)。PCRE/Perl 专有,JS 与 Python re 无此简写。
⚠ 不支持此方言: JavaScript
a b c\vPCRE 中为任意垂直空白(换行、CR 等);JS 中仅匹配垂直制表符 \x0B。
⚠ 不支持此方言: JavaScript
line1
line2[[:digit:]]方括号内的 POSIX 字符类(数字)。PCRE/Python 支持,JS 不支持。
⚠ 不支持此方言: JavaScript
abc123def[[:alpha:]]POSIX 字符类(ASCII 字母),需写在 [ ] 内。仅 PCRE/Python。
⚠ 不支持此方言: JavaScript
12 abc 34\x41用两位十六进制码指定字符(\x41 即 "A")。超过 0xFF 用 \x{…}(PCRE)或 \u{…}(JS /u)。
ABC abc\u{1F600}用十六进制码位指定字符。JS 需开 /u,可匹配 emoji 等 astral 字符。
😀 hi 😀[\d-]字符类内的字面连字符:放在首或尾,避免被当成范围。
call 555-0142 now
^字符串开头(加 /m 标志后为行首)。
foo bar foo$字符串末尾(加 /m 标志后为行尾)。
foo bar foo\b单词边界:\w 与 \W 之间。JS 默认仅 ASCII。
a cat, the category, scattered cats
\B非单词边界。
scattered concatenation
\A字符串绝对开头。JS 不支持,改用 ^。
⚠ 不支持此方言: JavaScript
foo bar\Z字符串绝对末尾。JS 不支持,改用 $。
⚠ 不支持此方言: JavaScript
foo bar foo\z字符串最末尾,不把结尾换行算在内(区别于 Python 的 \Z)。仅 Python/PCRE。
⚠ 不支持此方言: JavaScript
foo bar foo\G锚定到上一次匹配结束处。PCRE/Perl 专有;JS 改用 sticky 的 /y 标志。
⚠ 不支持此方言: JavaScript
123 456\K重置匹配起点:\K 之前的内容参与匹配但不计入结果。仅 PCRE。
⚠ 不支持此方言: JavaScript
foobar foobaz*前一个 token 零次或多次。默认贪婪。
g go goo gooo
+一次或多次。默认贪婪。
g go goo gooo
?零次或一次。常用于可选字母。
color and colour{n}恰好 n 次。
years 2025 2026 1999
{n,m}n 到 m 次(含端点)。
1 12 123 1234 12345
*?懒惰零次或多次:尽量少匹配。
<a><b><c>
++占有式:类似 + 但永不回溯。仅 PCRE 支持。
⚠ 不支持此方言: JavaScript
⚠ Invalid regular expression: /a++/g: Nothing to repeat+?懒惰一次或多次:在能匹配的前提下尽量少匹配。
aXbYb??懒惰零次或一次:优先不匹配,再尝试匹配一次。
ac abc{n,}至少 n 次,无上限。
12 123 12345
{n,m}?懒惰的区间重复:在不少于 n 的前提下尽量少匹配。
123456
*+占有式零次或多次:类似 * 但永不让步。仅 PCRE。
⚠ 不支持此方言: JavaScript
⚠ Invalid regular expression: /"[^"]*+"/g: Nothing to repeat?+占有式零次或一次:有就吃一个且不回溯。仅 PCRE。
⚠ 不支持此方言: JavaScript
⚠ Invalid regular expression: /ab?+c/g: Nothing to repeat{n}+占有式定次量词。仅 PCRE。
⚠ 不支持此方言: JavaScript
⚠ Invalid regular expression: /\d{2}+/g: Nothing to repeat(abc)捕获组。后续用 \1、\2 引用。
alice@example bob@toolora(?:abc)非捕获组:只用于量化,不留捕获。
abcdabab
(?<name>abc)命名捕获组(JS/PCRE)。Python 用 (?P<name>abc)。
born 1989 died 2026
(?P<name>abc)Python 命名组语法。JS/PCRE 用 (?<name>abc)。
⚠ 不支持此方言: JavaScript
\1引用第 1 个捕获组的内容。
the the cat sat sata|b选择:匹配 a 或 b。
cat dog fish bird
\k<name>引用命名捕获组(JS/PCRE)。Python 用 (?P=name)。
say "hi" or 'yo'
(?P=name)Python 中引用命名组。JS/PCRE 用 \k<name>。
⚠ 不支持此方言: JavaScript
\g<1>子程序调用 / 编号引用(Python re 在替换串中用 \g<1>;PCRE 递归用 (?1))。
⚠ 不支持此方言: JavaScript
(?>…)原子组:一旦匹配,内部永不回溯。PCRE/Perl 专有,JS 与 Python re 不支持。
⚠ 不支持此方言: JavaScript
⚠ Invalid regular expression: /(?>a+)b/g: Invalid group(?#…)行内注释:引擎忽略其内容。PCRE/Python 支持,JS 不支持。
⚠ 不支持此方言: JavaScript
⚠ Invalid regular expression: /\d+(?# count)/g: Invalid group(?i)行内标志:从此处起开启不区分大小写。PCRE/Python 支持;JS 仅允许 (?i:…) 限定作用域写法。
⚠ 不支持此方言: JavaScript
⚠ Invalid regular expression: /(?i)cat/g: Invalid group(?i:…)限定作用域的行内标志:仅组内不区分大小写。JS(v 标志)、PCRE、Python 3.11+ 支持。
⚠ Invalid regular expression: /(?i:cat)Dog/g: Invalid group(?1)递归 / 调用第 1 组的子程序,可写自引用模式。仅 PCRE。
⚠ 不支持此方言: JavaScript
⚠ Invalid regular expression: /(\w)(?1)?/g: Invalid group(?=…)正向先行断言:断言后面跟什么但不消耗。
14px 20em 32px
(?!…)负向先行断言:断言后面不跟什么。
14px 20em 32em
(?<=…)正向后行断言:断言前面是什么。
pay $42 or 17 free
(?<!…)负向后行断言:断言前面不是什么。
pay $42 or 17 free
(?=.*X)(?=.*Y)串联先行断言:一次性断言多个独立条件(常见的密码规则写法)。
a1 bad ok9
\b(?=\w)把边界与先行断言组合,精确锁定位置而不消耗字符。
one ne e two two wo o three
(?<=\d)(?=(\d{3})+$)零宽分割点:用于插入千位分隔符(从右每 3 位一组)。
11234234344567
(?<=\w)(?=\W)用两个断言自造的"词尾"边界:位于单词字符与非单词字符之间。
hihii, bye, bye byebyeyee!
gglobal:找所有匹配而非只找第一个。
i不区分大小写。
m多行:^ 和 $ 按行匹配,而非整个字符串。
sdotall:"." 也匹配换行。
uUnicode:启用 \u{…}、\p{…}、完整 Unicode 处理。
ysticky:只在 lastIndex 处匹配。用于词法分析器。
dJS hasIndices:匹配结果带 .indices,给出每个组的起止偏移。
vJS unicodeSets(ES2024):在 /u 基础上加集合运算 [a&&b]、[a--b] 与 \q{…} 字符串字面量。
xextended/verbose:忽略未转义空白并允许 # 注释。PCRE/Python 支持,JS 不支持。
⚠ 不支持此方言: JavaScript
aPython re.ASCII:让 \w \d \s \b 只匹配 ASCII,而非完整 Unicode。
⚠ 不支持此方言: JavaScript
UPCRE ungreedy:贪婪与懒惰互换,量词默认变懒惰。JS 与 Python 无此标志。
⚠ 不支持此方言: JavaScript
这个工具能做什么
可以真用的交互式正则速查表。每个 token、锚点、量词、分组、断言旁边 都配了一个小测试框,输入测试字符串就实时高亮匹配,用浏览器原生 RegExp 引擎本地跑,不走服务器,没有烦人广告。分类可折叠按需展开: 字符类(\d \w \s . [abc] [^abc] [a-z] \p{...})、锚点(^ $ \b \B \A \Z)、量词(* + ? {n,m} 贪婪 vs 懒惰)、分组与反向引用(() (?:) (?<name>) \1 \k<name>)、零宽断言((?=) (?!) (?<=) (?<!))、 标志(g i m s u y d)。方言切换器可在 JavaScript、Python、PCRE 之间 切换,表格里明确标出每个引擎支持的语法差异(例如 Python 命名组 是 (?P<name>) 而 JS / PCRE 用 (?<name>);PCRE 支持 a*+ 这种占有式 量词,JS 与 Python 都不行)。当你已经在 Stack Overflow 翻了三个 标签页只为确认 \b 在 Unicode 模式下到底匹不匹配中文边界时,直接 在这里打你的实例,看引擎怎么处理,比读文字快太多。内置 30+ 真实 例子可改写而不用从零写。100% 浏览器本地;模式与测试字符串都不 离开标签页。配合我们的 Regex Tester 做完整匹配 / 替换 / 捕获组 工作流;输出要嵌入 URL 时配合 URL Encoder。
工具细节
- 输入
- 文本 + 结构化内容
- 页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
- 输出
- 即时结果
- 结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
- 隐私
- 浏览器本地处理
- 主工具逻辑未发现外部 API 调用,输入通常留在当前标签页内处理。
- 保存 / 分享
- 免账号使用
- 打开页面即可使用;刷新后是否保留结果取决于具体工具。
- 性能预算
- 首屏 JS ≤ 16 KB
- 没有声明 WASM 依赖,适合快速打开和移动端使用。
- 适用场景
- 开发运维 · 程序员
- 分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。
怎么用
-
1. 输入
把内容粘贴或拖入工具面板。
-
2. 处理
点击按钮,在浏览器内本地处理,文件不上传。
-
3. 复制 / 下载
一键复制结果或下载到本地。
正则速查表 适合怎么用
适合穿插在写代码、查问题、做 Review、上线前的小任务里。
适合开发场景
- 格式化、校验、压缩或检查和代码相关的文本。
- 把片段整理好再放进文档、工单、提交或交接材料。
- 不切换工具,快速检查一个小 payload。
开发检查项
- 压缩、混淆这类不可逆处理,先对副本操作。
- 除非确认工具本地处理,不要粘贴密钥和敏感片段。
- 转换后的代码上线前,仍要跑自己的测试或 lint。
下一步可以接着做
这些入口会把当前任务接到更完整的工具链里。
真实使用场景
上线校验器前先确认 \b 到底认不认 Unicode
你写了 /\bword\b/ 想在用户评论里高亮某个词,QA 报了个 bug:在 "café word" 上失效。打开「锚点」分区,把 "café word" 敲进 \b 测试框, 再到「标志」那一行切换 u 标志。三秒就看清 \b 在 é 和空格之间的处理 会随 u 变化。你直接知道该补 u 标志,而不是再开两个 Stack Overflow 标签页瞎猜。
一分钟了结代码评审里贪婪与懒惰的争执
同事坚持 <(.+?)> 里的 .*? 解析标签「永远更稳」。打开「量词」,把 "<a><b>" 同时粘进 .+ 和 .+? 两个测试框,看着贪婪吞掉 "a><b",懒惰 停在第一个 >。你把两张截图丢进 PR 讨论串,争论就结了。不用为了证明 一行结论专门起一个 sandbox 仓库或开 Node REPL。
把 Python 模式搬到 JavaScript 不踩运行时坑
你接手一个用 (?P<id>\d+) 的 Python 爬虫,要挪进 Node 服务。把方言 切到 Python,确认命名组写法是 (?P<name>),再切到 JavaScript,表格 告诉你 JS 要写 (?<id>\d+)。你一次就把三个命名组改对,而不是推上去 一个 SyntaxError,等 20 分钟后 CI 才暴出来。
用真实输入教新人 lookahead,别拿幻灯片讲
带新人时对方问你密码规则里为什么有 (?=.*\d)。打开「零宽断言」,把 "abc1" 敲进 (?=) 测试框,演示这个零宽匹配如何断言「某处存在一个 数字」却不消耗字符。再删掉那个 1,看它失败。五分钟的实时 token 胜过 三十页幻灯片,新人之后能自己读懂你代码里的下一个断言。
常见踩坑
以为 \d 只匹配 0-9:就算开了 u 标志,/\d/u 仍只匹配 ASCII,而 \p{Nd} 会连阿拉伯-印度数字一起匹配。信任任何一个前,先在「字符类」分区把两个 都试一遍。
把 Python 的 (?P<name>) 直接抄进 JavaScript:JS 会抛 SyntaxError。先用 方言切换器确认该引擎要的是 (?<name>),再实时测一遍才粘进代码。
忘了 ^ 和 $ 只有开 m 标志才匹配行边界:在 "a\nb" 上不开 m 时,^b 永远 匹配不到。在「标志」那一行对一个两行字符串切换 m 标志,差异立刻可见。
隐私说明
每个迷你测试框都用浏览器原生 RegExp 编译,完全在标签页内运行,测试字符串 和模式都不会到服务器。你选的方言和主动分享的模式会存进 URL,方便一条链接 重现你的视图;如果测试字符串里有日志、内部 ID 或客户记录,别把它粘进可 分享字段,它就只留在本地。
常见问题
类似工具组合
做你这行的人, 还会一起用这些。