正则表达式测试器

在浏览器本地即时测试 JavaScript 正则表达式。

表达式
标志
测试文本
高亮匹配结果
输入表达式即可开始测试。

你的表达式和文本会在浏览器本地测试,不会上传到 BroBroGo。

常见问题

把文本粘贴到这里安全吗?

安全。匹配完全在你的浏览器里进行,不会发送到 BroBroGo。

g/i/m/s 这几个标志分别是什么意思?

g 表示查找所有匹配,而不只是第一个。i 表示忽略大小写。m 让 ^ 和 $ 匹配每一行的开头结尾,而不只是整个字符串。s 让 . 也能匹配换行符。

为什么提示我的表达式跑得太久?

某些写法会触发灾难性回溯——正则引擎要尝试指数级数量的组合才能放弃,可能会卡死整个浏览器标签页。这个工具会在 2 秒后强制取消过慢匹配,所以页面本身不会被卡住。可以试着简化嵌套重复的写法,比如 (a+)+。

JavaScript 正则表达式测试与匹配机制

正则表达式(Regular Expression)是用于在文本中进行模式匹配和提取的强大工具。本测试器专门用于在您的 Web 浏览器本地测试 JavaScript 正则表达式,帮助您即时观察特定模式在目标文本中的匹配行为。

在测试过程中,工具会实时高亮显示测试文本中的每一个匹配项,并清晰地列出捕获组。这有助于您验证表达式是否能够准确识别目标文本,或者在开发过程中调试复杂的匹配逻辑。

匹配标志的作用与行为

JavaScript 正则表达式的匹配行为很大程度上受修饰标志的影响。本工具支持以下四种核心标志的组合测试:

  • g (Global):全局匹配。如果未勾选此标志,引擎在找到第一个匹配项后就会停止;勾选后,工具会查找所有匹配项,但最多返回 1,000 个匹配结果,且最多展示 100 个匹配卡片。
  • i:忽略大小写。启用后,模式中的字母将同时匹配大写和小写形式。
  • m (Multiline):多行模式。使位置元字符 ^$ 能够匹配测试文本中每一行的开头和结尾,而不仅仅是整个输入字符串的绝对开头和绝对结尾。
  • s:单行模式(点号匹配换行符)。默认情况下,元字符 . 不会匹配换行符,启用此标志后,. 可以匹配包括换行符在内的任意字符。

匹配结果与捕获组的呈现

当您在“表达式”框中输入模式(例如默认占位符 \d+)并在“测试文本”中输入内容后,工具会实时输出以下信息:

  1. 高亮匹配结果:在原文本中直接高亮标记出所有成功匹配的区域。
  2. 匹配列表:详细列出每一个匹配到的具体文本。如果您的正则表达式中包含括号定义的捕获组,列表下方会以“第 {n} 组”的形式展示每个捕获组提取到的子内容。
  3. 匹配数:{count}:显示当前找到的匹配项总数。
  4. 字符:实时统计并显示当前测试文本的字符数。

异常处理与边界规则

为了保证浏览器的响应速度和测试体验,工具针对以下边界情况制定了明确的规则:

  • 无匹配:如果输入的模式在文本中找不到任何匹配,工具会显示“没有匹配项。”。
  • 语法错误:如果输入的正则表达式存在语法错误,工具会显示“不是合法的正则表达式。”。
  • 数量限制:在启用全局匹配(g)时,如果匹配到的数量过多,工具会显示“只显示前 {max} 个。”以防止页面因渲染过多元素而卡顿。
  • 清空重置:点击“清空”按钮可以一键清除所有输入和输出,此时工具会提示“已清空。”。

灾难性回溯与性能优化

在编写正则表达式时,一个常见的陷阱是“灾难性回溯”(Catastrophic Backtracking)。当正则表达式中包含嵌套的重复结构(例如 (a+)+),且目标文本与该模式高度相似但又不完全匹配时,正则引擎为了确认不匹配,需要尝试指数级数量的路径组合。

这会导致浏览器线程被完全占用,进而使页面甚至整个浏览器标签页失去响应。为了防止这种情况,本工具内置了安全保护机制:如果一个匹配模式的运行时间超过 2 秒,工具会自动强行终止匹配过程,并显示错误提示:“这个表达式跑得太久了——可能触发了灾难性回溯,试着简化一下。”。

浏览器本地处理与隐私说明

本工具充分保障您的数据隐私。您的正则表达式模式以及输入的测试文本完全在您的浏览器本地进行处理与匹配,没有任何数据会被上传到 BroBroGo 服务器。


常见问题

把文本粘贴到这里安全吗?

安全。匹配完全在你的浏览器里进行,不会发送到 BroBroGo。

g/i/m/s 这几个标志分别是什么意思?

g 表示查找所有匹配,而不只是第一个。i 表示忽略大小写。m 让 ^ 和 $ 匹配每一行的开头结尾,而不只是整个字符串。s 让. 也能匹配换行符。

为什么提示我的表达式跑得太久?

某些写法会触发灾难性回溯——正则引擎要尝试指数级数量的组合才能放弃,可能会卡死整个浏览器标签页。这个工具会在 2 秒后强制取消过慢匹配,所以页面本身不会被卡住。可以试着简化嵌套重复的写法,比如 (a+)+。