CodeKitHub
文本工具

括号与圆括号检查器

最后更新:

粘贴代码或文本,这个工具会扫描每一对 ( ) [ ] { },准确报告哪些括号未闭合、未开启,或类型不匹配——并给出每个问题的行号和列号。

工具介绍

括号检查器逐字符扫描文本,用栈跟踪每一个开括号 ( [ {,并与后面遇到的下一个闭括号 ) ] } 进行匹配。如果闭括号与最近的未闭合开括号不匹配,或某个开括号一直没有被闭合,或某个闭括号出现时已经没有可闭合的对象,就会被标记为问题,并附带精确位置。

这只是一种纯扫描式检查,不是完整的语言解析器——无论粘贴的内容是 JavaScript、Python、JSON 还是普通文字,处理方式都一样,因此适用于任何使用括号的语言或格式。

为什么使用它?

  • 编译器报了一句「Unexpected end of input」却不给行号,在四百行代码里肉眼找漏掉的一个花括号能耗掉十分钟——粘进来立刻定位到具体行列。
  • 晚上十一点手写 JSON 配置,程序加载时悄无声息地失败——先用检查器过一遍,别急着怀疑是数据本身写错了。
  • 一段正则表达式或数学公式套了六层圆括号,已经数不清哪一层没闭合——检查器帮你用栈追踪,不用自己一层层数。
  • 从群聊或论坛帖子里复制了一段代码,粘贴过来跑不通——先检查一下是不是复制粘贴时漏掉了某个括号,再往下排查。
  • 在代码审查里看到同事的改动缩进有点奇怪,说不准是不是括号出了问题——把改动的那一块粘过来查一下,立刻能确认是真的括号不匹配还是纯粹格式风格不同。
  • 要检查的不是 JavaScript、Python 或 JSON,而是别的格式——因为这是纯字符扫描,不依赖语言特定的 lint 工具,CSS、LaTeX 或任何用到括号的文本都能一样处理。

使用方法

  1. 把代码或文本粘贴到输入框。
  2. 点击「检查括号」。
  3. 查看问题列表(每条附带行号和列号),或看到「全部匹配」的确认提示。

示例

输入

function foo() {
  return [1, 2, (3];
}

输出

括号类型不匹配:第 2 行第 18 列的 ];括号类型不匹配:第 3 行第 1 列的 };未闭合的开括号:第 1 行第 17 列的 {

第 2 行的 ] 本应闭合第 15 列开启的 (,而不是更早的 [——这正是那种在长文件中肉眼很容易漏看的 bug(类型错误的闭括号)。

括号类型与对应的错误提示

检查器只跟踪三种括号对。了解每种错误标签对应哪种问题,能更快地针对报告采取行动。

括号对常见用途典型触发的错误
( )函数调用、表达式分组、数学公式参数列表很长时漏掉闭合的 ) ,报「未闭合的开括号」
[ ]数组、列表索引、正则表达式字符类误用 ] 去闭合 { 或 ( 时,报「括号类型不匹配」
{ }对象、代码块、函数体嵌套代码块结尾忘记写 } 时,在文件末尾报「未闭合的开括号」

常见用途

  • 在 JavaScript、JSON 或 Python 中调试「Unexpected token」或「Unexpected end of input」错误,而不用逐行仔细通读整个文件。
  • 在把手写的 JSON 片段粘贴进配置文件之前,检查是否有多余或缺失的花括号。
  • 验证长数学表达式或公式中嵌套圆括号的正确性。
  • 在代码审查中发现复制粘贴编辑时意外遗留下来的括号。

常见问题

这个工具会检查引号或标签吗,还是只检查括号?

只检查三种括号:圆括号 ( )、方括号 [ ] 和花括号 { }。不会跟踪引号或 HTML/XML 标签。

三种问题类型有什么区别?

「未闭合的开括号」指某个开括号直到文本结尾都没有被闭合。「未匹配的闭括号」指出现了一个闭括号,但前面没有对应的开括号。「括号类型不匹配」指出现了一个闭括号,但它的类型和最近打开的括号不一致——比如用 ) 去闭合一个 [。

它能识别字符串或注释里的括号不该被计入吗?

不能——这只是纯字符扫描,不是语言感知的解析器,所以它不了解字符串字面量或注释。引号内或注释中的括号字符仍然会被计入。要在真实源文件上得到完全准确的结果,需要先剥离字符串/注释,或使用编辑器内置的语法感知括号匹配功能。

我的代码会被上传吗?

不会。检查过程以本地 JavaScript 的形式在你的浏览器中运行,不会发送到任何服务器。

它能正确处理深层嵌套的括号吗,比如 ((([{...}])))?

可以——检查器用一个栈按开括号出现的顺序进行跟踪,因此能正确匹配任意深度的嵌套。没有人为设置的嵌套层数限制,唯一的实际限制是浏览器的内存。

如果粘贴的文本里完全没有括号会怎样?

工具会报告「全部匹配」,因为没有任何开括号或闭括号可供标记为问题——结果为空说明没有发现问题,而不是检查失败。

它能分辨出是闭括号多了还是开括号少了吗?

可以间接分辨:多余的、找不到对应开括号的闭括号会被标记为「未匹配的闭括号」;而开了却一直没被闭合的括号会被标记为「未闭合的开括号」——这样你就能判断问题出在哪一侧。

对压缩成一行的代码也能用吗?

可以——扫描是逐字符进行的,跟换行无关,不过这种情况下报告的列号会比行号更有参考价值,因为压缩代码通常只有一行,但会非常长。

这能替代编辑器自带的括号匹配功能吗?

不完全能——编辑器的括号匹配通常是语言感知的,会在你输入时实时高亮配对;而这个工具是对粘贴文本做一次性扫描,更适合你手头没打开编辑器,或者想要一份列出所有问题的纯文本报告的场景。

相关工具