正则表达式测试工具
在浏览器中运行,不上传任何内容
用你的文本测试 JavaScript 正则表达式,支持捕获组和替换。
Test text
Type a pattern
什么是正则表达式?
正则表达式(regex)是描述一组字符串的模式。\d{3} 表示三个数字,[a-z]+ 表示一个或多个小写字母,^ 和 $ 把匹配锚定在开头和结尾。程序用模式来查找、提取、校验和替换文本。
模式中用括号括起来的部分是捕获组。用 (\d{4})-(\d{2}) 匹配 2025-07 时,第 1 组是 2025,第 2 组是 07。像 (?<year>\d{4}) 这样的命名组可以按名称引用某一部分。标志(flag)会改变整个模式的行为:i 忽略大小写,g 查找所有匹配而不只是第一个。
本工具运行的是 JavaScript 的 RegExp,也就是浏览器和 Node.js 中的引擎,所以在这里能用的模式,在 JavaScript 和 TypeScript 中效果完全相同。其他语言的语法大部分相同,但并不完全一致;下面的问答列出了最常见的差异。
使用方法
- 1在两个斜杠之间的输入框中输入模式,不要包含斜杠本身。Presets 会载入一个模式及示例文本。
- 2在工具栏中开关标志:
g全局,i忽略大小写,m多行,sdotAll,u和vUnicode 模式,y粘连,d组索引。鼠标悬停在标志上可以查看说明。 - 3把要搜索的文本粘贴到 Test text,或把文件拖进去。输入时匹配会被高亮,并在 Matches 中列出行号、列号和捕获组。
- 4点击某个匹配,或在模式输入框中按 Enter(其他位置按 F7),即可在文本中选中它并高亮其捕获组。Shift+Enter 或 Shift+F7 返回上一个。
- 5打开 Replace,试试
$2/$1或$<year>这样的替换并查看结果。Apply to test text 会把结果写入文本;Ctrl+Z 可以撤销。
问题排查
- 2 秒后被中止
- 该模式在这段文本上出现了灾难性回溯:
(a+)+或(.*,)*这样的嵌套量词在失败前会尝试指数级数量的匹配方式。让每个重复部分只有一种匹配方式,例如用[^,]*代替.*。同样的模式也可能让服务器卡死,所以这里会中止它。 - 模式在代码里能用、在这里不行,或者反过来
- 在代码的字符串字面量中,每个反斜杠都要写两遍(
"\\d+")。在这里输入的是模式本身,只用一个反斜杠(\d+),就像/\d+/两个斜杠之间的写法。 - 只找到一个匹配
g标志没有打开。没有它,搜索会在第一个匹配后停止,Replace 也只替换第一个。^或$只匹配一次- 没有
m标志时,它们只匹配整个文本的开头和结尾。打开m后会在每一行匹配。 - 使用
u标志时出现无效转义或无效分组 - Unicode 模式更严格:没有意义的转义(例如字符类之外的
\-)会变成错误。去掉反斜杠,或关闭u。
常见问题
JavaScript 的正则和 PCRE、Python 或 Java 有什么不同?
JavaScript 没有占有量词(a++)和原子组((?>…)),没有 \A 和 \Z(请使用不带 m 标志的 ^ 和 $),也不支持在模式开头写 (?i):请改用开关设置标志。Python 的命名组写作 (?P<name>…),而 JavaScript 写作 (?<name>…)。当前浏览器都支持后行断言、命名组以及 \p{L} 这样的 Unicode 属性转义(需配合 u 或 v)。
m 和 s 标志有什么区别?
m(多行)让 ^ 和 $ 匹配每一行的开头和结尾。s(dotAll)让 . 也能匹配换行;没有它时,. 匹配除换行以外的任意字符。
邮箱预设是完整的邮箱校验器吗?
不是。它用于在文本中找出常见的 name@domain.tld 形式,这通常正是你在日志或响应中搜索时需要的。完整的邮箱地址标准允许的写法要多得多。要校验地址,先检查基本格式,再发送一封确认邮件。
我的文本会发送到服务器吗?
不会。匹配在你的浏览器中、由本页面的后台 worker 运行,不会上传任何内容。为了刷新后不丢失,模式和文本会保存在当前标签页的 session storage 中,直到你清除它或关闭标签页。Copy link 会把输入放在链接的 # 之后,浏览器从不把这部分发送给服务器,但拿到链接的人都能看到内容。