跳到主要内容

交互式正则速查表:每个 token 实时可试

交互式正则速查表,JS / Python / PCRE 各方言一站查询。

  • 本地处理
  • 分类 开发运维
  • 适合 格式化、校验、压缩或检查和代码相关的文本。
方言:
\d

任意十进制数字(0-9)。JS 加 /u 标志后,也匹配 Unicode 数字。

2 个匹配
order 42 items
\D

任意非数字字符。

8 个匹配
abc 123 def
\w

"单词"字符:ASCII 字母 / 数字 / 下划线。JS 默认不识别 Unicode 字母。

13 个匹配
hello_world 42!
\W

非单词字符。

3 个匹配
hi, world!
\s

任意空白:空格、Tab、换行等。

3 个匹配
one two	three
four
\S

非空白字符。

3 个匹配
a b c
.

除换行外的任意字符(加 /s 标志后含换行)。

2 个匹配
a
b
[abc]

列出的任一字符(此例:任意元音)。

4 个匹配
regex is fun
[^abc]

不在列表中的任意字符(反向类)。

6 个匹配
regex is fun
[a-z]

字符范围。多个范围可合并:[a-zA-Z0-9]。

4 个匹配
AB cd EF
\p{L}

Unicode 属性:任意字母(任意 script)。JS 需开 /u 标志。

0 个匹配
abc αβγ 中文
\P{L}

Unicode 属性取反:非字母的任意字符。JS 需开 /u。

0 个匹配
a1 中.x
\p{N}

Unicode 属性:任意数值字符,含非 ASCII 数字与数码。

0 个匹配
a1 二 Ⅻ ½
\p{Lu}

Unicode 属性:任意大写字母。小写为 \p{Ll}。JS 需开 /u。

0 个匹配
Hello WORLD abc
\p{Han}

Unicode script 属性:汉字(CJK)。JS 用 \p{Script=Han} 配 /u。

不支持此方言: JavaScript

0 个匹配
汉字 mixed カナ
\h

水平空白(空格、Tab)。PCRE/Perl 专有,JS 与 Python re 无此简写。

不支持此方言: JavaScript

0 个匹配
a	b  c
\v

PCRE 中为任意垂直空白(换行、CR 等);JS 中仅匹配垂直制表符 \x0B。

不支持此方言: JavaScript

0 个匹配
line1
line2
[[:digit:]]

方括号内的 POSIX 字符类(数字)。PCRE/Python 支持,JS 不支持。

不支持此方言: JavaScript

0 个匹配
abc123def
[[:alpha:]]

POSIX 字符类(ASCII 字母),需写在 [ ] 内。仅 PCRE/Python。

不支持此方言: JavaScript

0 个匹配
12 abc 34
\x41

用两位十六进制码指定字符(\x41 即 "A")。超过 0xFF 用 \x{…}(PCRE)或 \u{…}(JS /u)。

1 个匹配
ABC abc
\u{1F600}

用十六进制码位指定字符。JS 需开 /u,可匹配 emoji 等 astral 字符。

0 个匹配
😀 hi 😀
[\d-]

字符类内的字面连字符:放在首或尾,避免被当成范围。

1 个匹配
call 555-0142 now
^

字符串开头(加 /m 标志后为行首)。

1 个匹配
foo bar foo
$

字符串末尾(加 /m 标志后为行尾)。

1 个匹配
foo bar foo
\b

单词边界:\w 与 \W 之间。JS 默认仅 ASCII。

1 个匹配
a cat, the category, scattered cats
\B

非单词边界。

2 个匹配
scattered concatenation
\A

字符串绝对开头。JS 不支持,改用 ^。

不支持此方言: JavaScript

0 个匹配
foo bar
\Z

字符串绝对末尾。JS 不支持,改用 $。

不支持此方言: JavaScript

0 个匹配
foo bar foo
\z

字符串最末尾,不把结尾换行算在内(区别于 Python 的 \Z)。仅 Python/PCRE。

不支持此方言: JavaScript

0 个匹配
foo bar foo
\G

锚定到上一次匹配结束处。PCRE/Perl 专有;JS 改用 sticky 的 /y 标志。

不支持此方言: JavaScript

0 个匹配
123 456
\K

重置匹配起点:\K 之前的内容参与匹配但不计入结果。仅 PCRE。

不支持此方言: JavaScript

0 个匹配
foobar foobaz
*

前一个 token 零次或多次。默认贪婪。

4 个匹配
g go goo gooo
+

一次或多次。默认贪婪。

3 个匹配
g go goo gooo
?

零次或一次。常用于可选字母。

2 个匹配
color and colour
{n}

恰好 n 次。

3 个匹配
years 2025 2026 1999
{n,m}

n 到 m 次(含端点)。

4 个匹配
1 12 123 1234 12345
*?

懒惰零次或多次:尽量少匹配。

3 个匹配
<a><b><c>
++

占有式:类似 + 但永不回溯。仅 PCRE 支持。

不支持此方言: JavaScript

0 个匹配
Invalid regular expression: /a++/g: Nothing to repeat
+?

懒惰一次或多次:在能匹配的前提下尽量少匹配。

1 个匹配
aXbYb
??

懒惰零次或一次:优先不匹配,再尝试匹配一次。

2 个匹配
ac abc
{n,}

至少 n 次,无上限。

2 个匹配
12 123 12345
{n,m}?

懒惰的区间重复:在不少于 n 的前提下尽量少匹配。

3 个匹配
123456
*+

占有式零次或多次:类似 * 但永不让步。仅 PCRE。

不支持此方言: JavaScript

0 个匹配
Invalid regular expression: /"[^"]*+"/g: Nothing to repeat
?+

占有式零次或一次:有就吃一个且不回溯。仅 PCRE。

不支持此方言: JavaScript

0 个匹配
Invalid regular expression: /ab?+c/g: Nothing to repeat
{n}+

占有式定次量词。仅 PCRE。

不支持此方言: JavaScript

0 个匹配
Invalid regular expression: /\d{2}+/g: Nothing to repeat
(abc)

捕获组。后续用 \1、\2 引用。

2 个匹配
alice@example bob@toolora
(?:abc)

非捕获组:只用于量化,不留捕获。

1 个匹配
abcdabab
(?<name>abc)

命名捕获组(JS/PCRE)。Python 用 (?P<name>abc)。

2 个匹配
born 1989 died 2026
(?P<name>abc)

Python 命名组语法。JS/PCRE 用 (?<name>abc)。

不支持此方言: JavaScript

(无实时测试,纯概念条目)
\1

引用第 1 个捕获组的内容。

2 个匹配
the the cat sat sat
a|b

选择:匹配 a 或 b。

3 个匹配
cat dog fish bird
\k<name>

引用命名捕获组(JS/PCRE)。Python 用 (?P=name)。

2 个匹配
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

0 个匹配
Invalid regular expression: /(?>a+)b/g: Invalid group
(?#…)

行内注释:引擎忽略其内容。PCRE/Python 支持,JS 不支持。

不支持此方言: JavaScript

0 个匹配
Invalid regular expression: /\d+(?# count)/g: Invalid group
(?i)

行内标志:从此处起开启不区分大小写。PCRE/Python 支持;JS 仅允许 (?i:…) 限定作用域写法。

不支持此方言: JavaScript

0 个匹配
Invalid regular expression: /(?i)cat/g: Invalid group
(?i:…)

限定作用域的行内标志:仅组内不区分大小写。JS(v 标志)、PCRE、Python 3.11+ 支持。

0 个匹配
Invalid regular expression: /(?i:cat)Dog/g: Invalid group
(?1)

递归 / 调用第 1 组的子程序,可写自引用模式。仅 PCRE。

不支持此方言: JavaScript

0 个匹配
Invalid regular expression: /(\w)(?1)?/g: Invalid group
(?=…)

正向先行断言:断言后面跟什么但不消耗。

2 个匹配
14px 20em 32px
(?!…)

负向先行断言:断言后面不跟什么。

3 个匹配
14px 20em 32em
(?<=…)

正向后行断言:断言前面是什么。

1 个匹配
pay $42 or 17 free
(?<!…)

负向后行断言:断言前面不是什么。

2 个匹配
pay $42 or 17 free
(?=.*X)(?=.*Y)

串联先行断言:一次性断言多个独立条件(常见的密码规则写法)。

1 个匹配
a1 bad ok9
\b(?=\w)

把边界与先行断言组合,精确锁定位置而不消耗字符。

0 个匹配
one ne e  two two wo o  three
(?<=\d)(?=(\d{3})+$)

零宽分割点:用于插入千位分隔符(从右每 3 位一组)。

0 个匹配
11234234344567
(?<=\w)(?=\W)

用两个断言自造的"词尾"边界:位于单词字符与非单词字符之间。

0 个匹配
hihii, bye, bye byebyeyee!
g

global:找所有匹配而非只找第一个。

(无实时测试,纯概念条目)
i

不区分大小写。

(无实时测试,纯概念条目)
m

多行:^ 和 $ 按行匹配,而非整个字符串。

(无实时测试,纯概念条目)
s

dotall:"." 也匹配换行。

(无实时测试,纯概念条目)
u

Unicode:启用 \u{…}、\p{…}、完整 Unicode 处理。

(无实时测试,纯概念条目)
y

sticky:只在 lastIndex 处匹配。用于词法分析器。

(无实时测试,纯概念条目)
d

JS hasIndices:匹配结果带 .indices,给出每个组的起止偏移。

(无实时测试,纯概念条目)
v

JS unicodeSets(ES2024):在 /u 基础上加集合运算 [a&&b]、[a--b] 与 \q{…} 字符串字面量。

(无实时测试,纯概念条目)
x

extended/verbose:忽略未转义空白并允许 # 注释。PCRE/Python 支持,JS 不支持。

不支持此方言: JavaScript

(无实时测试,纯概念条目)
a

Python re.ASCII:让 \w \d \s \b 只匹配 ASCII,而非完整 Unicode。

不支持此方言: JavaScript

(无实时测试,纯概念条目)
U

PCRE 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. 1. 输入

    把内容粘贴或拖入工具面板。

  2. 2. 处理

    点击按钮,在浏览器内本地处理,文件不上传。

  3. 3. 复制 / 下载

    一键复制结果或下载到本地。

正则速查表 适合怎么用

适合穿插在写代码、查问题、做 Review、上线前的小任务里。

适合开发场景

  • 格式化、校验、压缩或检查和代码相关的文本。
  • 把片段整理好再放进文档、工单、提交或交接材料。
  • 不切换工具,快速检查一个小 payload。

开发检查项

  • 压缩、混淆这类不可逆处理,先对副本操作。
  • 除非确认工具本地处理,不要粘贴密钥和敏感片段。
  • 转换后的代码上线前,仍要跑自己的测试或 lint。

下一步可以接着做

这些入口会把当前任务接到更完整的工具链里。

  1. 1 JSON 格式化与校验 浏览器内即时格式化、校验、压缩 JSON,数据不离开本地。 打开
  2. 2 正则测试 实时测 JavaScript 正则(匹配高亮 / 捕获组 / 替换预览 / 标志可调),浏览器本地 打开
  3. 3 大小写转换 一键转 camelCase、snake_case、kebab-case、PascalCase、Title Case、UPPER、lower,浏览器本地处理 打开

真实使用场景

  • 上线校验器前先确认 \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 或客户记录,别把它粘进可 分享字段,它就只留在本地。

常见问题

类似工具组合

做你这行的人, 还会一起用这些。

Made by Toolora · 100% client-side · Updated 2026-06-13