如何在线测试正则表达式

· 5 分钟阅读

正则表达式是编程中最强大的工具之一,也是最令人沮丧的之一。正则测试器让您可以交互式地构建和调试模式,而不是运行代码、检查输出和猜测出了什么问题。反馈循环从每次迭代几分钟降到几秒钟。

为什么使用正则测试器

在代码编辑器中编写正则表达式意味着您只能在运行时看到错误。测试器向您显示:

如何在线测试正则

  1. 输入您的模式:在模式字段中键入正则。根据需要切换标志(g表示全局,i表示不区分大小写,m表示多行)。
  2. 粘贴您的测试文本:输入您要匹配的文本。匹配实时高亮。
  3. 查看结果:查看所有匹配项及下面列出的捕获组。使用「替换为」字段测试替换。

正则表达式的简史

正则表达式由数学家Stephen Kleene于1951年在他关于神经网络的工作中作为「正则事件」的符号正式化。它们从理论跃升到实际使用,是当Ken Thompson于1968年在贝尔实验室的QED文本编辑器中实现它们时,然后在ed编辑器(1969)中,最后在grep实用程序(1973)中,其名称来自「global / regular expression / print」。

由Larry Wall于1987年引入的Perl显著扩展了正则语法:非贪婪量词、前瞻、命名组、字符类快捷方式如\d\w。1997年发布的Perl兼容正则表达式(PCRE)库成为大多数现代语言的事实标准。

今天,几乎每种编程语言都内置了正则支持,尽管语法略有不同。JavaScript的引擎(Chrome中的V8、Firefox中的SpiderMonkey)经过高度优化,为大多数在线正则测试器提供支持。PHP、Python(re模块)和Java(java.util.regex)使用密切相关但不完全相同的语法。了解您正在为哪种风格编写对高级功能很重要。

值得了解的常见正则模式

电子邮件地址(基本):

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

URL:

https?://[^\s]+

电话号码(美国):

\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}

日期(YYYY-MM-DD):

\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])

IP地址(IPv4):

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

十六进制颜色代码:

#(?:[0-9a-fA-F]{3}){1,2}\b

Slug(URL安全标识符):

^[a-z0-9]+(?:-[a-z0-9]+)*$

修剪空格的字符串:

^\s*(.*?)\s*$

跨语言的风格差异

正则语法主要是可移植的,但有陷阱:

当您在测试器中编写正则(几乎总是JavaScript风格)时,在提交之前确认目标语言支持您使用的所有功能。

常见陷阱

何时不使用正则

正则对某些工作来说是错误的工具:

如果您发现自己正在编写超过100个字符的正则,具有多个嵌套组,那么您可能正在解决错误的问题。

编写更好正则的技巧

隐私和机密测试数据

正则测试器完全在您的浏览器中使用JavaScript的原生RegExp引擎运行。您编写的模式、您粘贴的测试文本和您看到的匹配都保留在您的设备上。没有任何内容被上传、记录或由任何服务器分析。

这很重要,因为正则测试文本经常包含敏感信息:生产日志样本(带有真实用户ID、IP地址、会话令牌)、从CRM中提取的电子邮件列表、以不寻常方式格式化的客户数据。云正则测试器将所有这些通过其服务器路由,有时为「改进」目的保存它。基于浏览器的测试器对任何这些都没有暴露。

常见问题

我的正则能在其他编程语言中工作吗?

大部分正则语法在 JavaScript、Python、Java、PHP 和其他语言之间是共享的。基础模式(字符类、量词、锚点)到处有效。但高级功能如后顾断言或命名组因语言而异。

我的测试数据会发送到服务器吗?

不会。所有匹配在您的浏览器中使用 JavaScript 的原生 RegExp 引擎本地完成。没有任何内容发送到其他地方。

可以测试替换吗?

可以。输入替换模式(使用 $1、$2 等表示捕获组)以实时查看查找替换的结果。

可以离线使用吗?

可以。页面加载后,工具完全在您的浏览器中工作,无需联网。