开发者工具2026-05-10

正则表达式测试器:在线构建、测试和调试正则表达式

正则表达式是一种模式匹配语言,能够以手工字符串操作无法比拟的精度查找、提取、验证和替换文本。但编写正则表达式很困难——一个放错位置的量词就会将精确的模式变成性能炸弹或静默的不匹配。我们的正则表达式测试器让您编写模式、粘贴或输入测试数据,并在您输入时看到实时高亮匹配。它默认支持JavaScript(ECMAScript 2024)语法,并可切换为PCRE2(PHP)、Python 3、Java和.NET风格——每种风格对后顾断言、Unicode属性转义和回溯控制等功能的处理方式都不同。该工具以不同颜色可视化捕获组,标记第一个匹配的确切字符位置,并在您的模式存在灾难性回溯风险时发出警告(例如,(a+)+b匹配"aaaaaaaaac"——在25个字符时可能冻结线程,在30个字符时比宇宙年龄还长)。无论您是在为表单编写验证规则、解析日志文件,还是使用查找替换重构代码,交互式测试您的正则表达式都可以节省时间并防止代价高昂的错误。

manage_search

正则表达式测试器

免费 · 无需注册

免费试用此工具 →open_in_new

分步指南

1

编写您的正则表达式模式

在模式字段中输入您的正则表达式。该工具接受字面量正则表达式(在正斜杠之间,例如/pattern/g)或裸模式字符串。快速参考侧边栏列出了常用标记——字符类(d、w、s)、量词(*、+、?、{n,m})、锚点(^、$、)和分组(捕获、非捕获、命名)。悬停任何标记会显示带有其含义和示例的工具提示。

2

粘贴测试数据并查看匹配结果

将您的测试文本——示例API响应、日志输出、用户输入或代码——粘贴到测试数据区域。当您输入或修改模式时,匹配会实时高亮显示。每个捕获组都有颜色编码:组0(完整匹配)为蓝色,组1为绿色,组2为橙色,命名组在图例中显示其名称。匹配位置(起始/结束索引)显示在下方。

3

切换标志和正则引擎风格

使用复选框启用标志:g(全局——查找所有匹配,而不仅仅是第一个)、i(不区分大小写)、m(多行——^和$在行边界匹配,而不仅仅是整个字符串的起始/结束)、s(dotall——.匹配换行符)、u(Unicode——启用\u{...}和Unicode属性转义)和y(粘性)。通过下拉菜单切换正则引擎风格,以确保您的模式在目标环境中正确工作。

使用技巧与最佳实践

check_circle

最常见的正则性能杀手是灾难性回溯——当带有嵌套量词的模式(如(a+)+b)在失败前尝试所有可能的输入划分方式时发生。对于25个字符的"a"输入,这可能需要超过3300万次回溯步骤。修复方法是使用所有格量词(a++b)或原子组((?>a+)b)(如果您的引擎支持),或重写模式使其更具体。

check_circle

惰性量词(*?、+?、??、{n,m}?)尽可能少地匹配字符,而不是尽可能多地匹配。它们在匹配分隔内容时至关重要——例如,/<p>.*?</p>/匹配每个段落标签对,而不是从第一个<p>匹配到最后一个</p>(贪婪的.*会这样做)。

check_circle

前瞻和后顾断言让您根据文本的前后内容来匹配文本,而无需将上下文包含在匹配中。正向前瞻:/foo(?=bar)/仅在"foo"后跟"bar"时匹配。负向后顾:/(?<!\\)$/仅在美元符号前面没有反斜杠时匹配。JavaScript在ES2018中添加了后顾支持。

check_circle

命名捕获组使正则表达式的可读性大大提高。使用/(?<year>d{4})-(?<month>d{2})-(?<day>d{2})/,按名称引用组:match.groups.year,而不是使用带有数字组引用的/(d{4})-(d{2})-(d{2})/。Python、JavaScript、PCRE和.NET都支持此语法。

check_circle

Unicode属性转义(p{...})让您匹配整个字符类,而无需逐一列出每个字符。例如,p{Script=Han}匹配任何中文字符,p{Emoji}匹配表情符号,p{Lu}匹配任何文字中的大写字母。这比手动列出Unicode范围要健壮得多。

check_circle

对于电子邮件验证,根据RFC 5322,唯一正确的正则表达式超过200个字符,且仍然不完美。对于实际表单验证,使用简单模式如/^[^s@]+@[^s@]+.[^s@]+$/作为初步检查,然后发送确认邮件。不要试图用正则表达式验证电子邮件规范的每个边缘情况——它不是适合这项工作的正确工具。

check_circle

标志会显著改变正则表达式的行为。g标志运行全局搜索(多个匹配)。没有它,只返回第一个匹配。u标志启用完整的Unicode支持——没有它,像/w{2,}/这样的模式可能会对非ASCII字符产生意外行为。除非您确定不需要Unicode,否则始终为现代JavaScript正则表达式设置u标志。

check_circle

针对边缘情况测试您的正则表达式,而不仅仅是正常路径输入。空字符串、只有特殊字符的字符串、最大长度的字符串和Unicode文本都可能暴露缺陷。正则表达式测试器让您保存测试用例集并一次性对模式运行所有用例。

常见问题解答

虽然核心正则语法(d、+、*、^、$、分组)是通用的,但每种引擎都有独特的功能和怪癖。PCRE2(PHP和许多CLI工具使用)支持递归模式、所有格量词和回调。JavaScript(ECMAScript)缺少所有格量词和Q...E引用,但有后顾断言(ES2018)。Python支持使用(?P<name>...)的命名组——与JavaScript的(?<name>...)不同。Java需要在字符串字面量中使用双反斜杠转义(d在代码中变为\\d)。.NET支持用于匹配嵌套结构的平衡组。

正则表达式是开发者工具箱中最强大的工具之一——也是最容易出错的工具之一。交互式测试可以捕获静默的不匹配、回溯炸弹和跨引擎不兼容问题,避免它们进入生产环境。我们的免费正则表达式测试器支持四种主要引擎风格,完全在您的浏览器中运行。现在就开始测试您的模式。

免费试用此工具 →open_in_new