跳到主要内容
1123.net
ZH
1123.net

搜索工具

在工具目录中筛选,全部在浏览器本地完成。

输入关键词即可筛选,按回车打开第一个结果。

正则表达式测试

这个工具用 JavaScript 正则表达式匹配你输入的文本,列出每一处匹配、它在文本中的位置以及捕获组的内容。所有计算都在浏览器里完成,文本不会上传。

所有数据都在你的浏览器本地处理,不会上传到我们的服务器。

标志
匹配结果 (2)
Contact ada@example.com or grace@example.org for details.
  1. #1 ada@example.com 位置 8
  2. #2 grace@example.org 位置 27

如何使用这个工具

  1. 1 输入正则表达式,并按需要勾选标志。
  2. 2 粘贴要搜索的文本,匹配结果会随输入实时高亮并列出。
  3. 3 也可以从常用示例里选一个现成的表达式开始。
  4. 4 复制匹配到的内容,或清空输入重新开始。

公式与计算逻辑

匹配过程

new RegExp(pattern, flags).exec(text)

表达式由浏览器的 JavaScript 引擎编译。不加 g 标志时只返回第一处匹配;加上 g 之后,工具会一直匹配到文本末尾。

标志

g global · i ignore case · m multiline · s dotAll · u unicode · y sticky

标志决定引擎如何解释表达式。工具把它们原样传给 RegExp 构造函数,语法错误则显示引擎给出的原始信息。

示例演示

找出邮箱地址

一封客服来信里有两个邮箱地址。

  1. 表达式:\b[\w.+-]+@[\w-]+\.[\w.]+\b
  2. 标志:g
  3. 结果:ada@example.com 和 grace@example.org

每处匹配都会标出起始位置;表达式里带括号时,还会同时显示捕获组的内容。

拆分日期

从 ISO 日期里取出年、月、日。

  1. 表达式:(\d{4})-(\d{2})-(\d{2})
  2. 标志:g
  3. 分组:每处匹配的年、月、日

括号里的部分按出现顺序作为捕获组返回,可以直接取用,不必再切分字符串。

边界情况与精度

灾难性回溯

(a+)+ 这类嵌套量词会让引擎在某些输入上呈指数级耗时(catastrophic backtracking)。页面一旦卡住,请简化表达式;正在运行的正则无法被工具中断。

零长度匹配

^ 或 \b 这样的表达式可以匹配空字符串。遇到空匹配时,工具会把搜索位置向后移动一位,避免陷入死循环。

只支持 JavaScript 语法

工具使用 JavaScript 的 RegExp 语法,而不是 PCRE 或 Python 语法。后行断言和具名分组只在实现了它们的引擎中可用。

常见问题

为什么只显示一处匹配? +

要找出全部匹配,需要勾选 g(global)标志;不勾选时,工具在第一个结果之后就停止。

捕获组是什么? +

表达式里每一对括号都会捕获一段文本。捕获组按左括号出现的顺序从 1 开始编号,显示在匹配结果旁边;没有参与匹配的可选组显示为 ∅。

表达式和文本会被上传吗? +

不会。匹配使用的是浏览器自带的 RegExp 引擎,不会向服务器发送任何内容。

正则为什么会变慢? +

嵌套量词和有歧义的择一会引发灾难性回溯。可以把表达式写得更具体,或用锚点限制搜索范围。

支持具名分组吗? +

引擎接受现代 JavaScript 语法,浏览器支持时具名分组即可使用。结果列表按编号显示捕获组。