工具介绍
括号检查器逐字符扫描文本,用栈跟踪每一个开括号 ( [ {,并与后面遇到的下一个闭括号 ) ] } 进行匹配。如果闭括号与最近的未闭合开括号不匹配,或某个开括号一直没有被闭合,或某个闭括号出现时已经没有可闭合的对象,就会被标记为问题,并附带精确位置。
这只是一种纯扫描式检查,不是完整的语言解析器——无论粘贴的内容是 JavaScript、Python、JSON 还是普通文字,处理方式都一样,因此适用于任何使用括号的语言或格式。
为什么使用它?
- 编译器报了一句「Unexpected end of input」却不给行号,在四百行代码里肉眼找漏掉的一个花括号能耗掉十分钟——粘进来立刻定位到具体行列。
- 晚上十一点手写 JSON 配置,程序加载时悄无声息地失败——先用检查器过一遍,别急着怀疑是数据本身写错了。
- 一段正则表达式或数学公式套了六层圆括号,已经数不清哪一层没闭合——检查器帮你用栈追踪,不用自己一层层数。
- 从群聊或论坛帖子里复制了一段代码,粘贴过来跑不通——先检查一下是不是复制粘贴时漏掉了某个括号,再往下排查。
- 在代码审查里看到同事的改动缩进有点奇怪,说不准是不是括号出了问题——把改动的那一块粘过来查一下,立刻能确认是真的括号不匹配还是纯粹格式风格不同。
- 要检查的不是 JavaScript、Python 或 JSON,而是别的格式——因为这是纯字符扫描,不依赖语言特定的 lint 工具,CSS、LaTeX 或任何用到括号的文本都能一样处理。
使用方法
- 把代码或文本粘贴到输入框。
- 点击「检查括号」。
- 查看问题列表(每条附带行号和列号),或看到「全部匹配」的确认提示。
示例
输入
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 的形式在你的浏览器中运行,不会发送到任何服务器。
它能正确处理深层嵌套的括号吗,比如 ((([{...}])))?
可以——检查器用一个栈按开括号出现的顺序进行跟踪,因此能正确匹配任意深度的嵌套。没有人为设置的嵌套层数限制,唯一的实际限制是浏览器的内存。
如果粘贴的文本里完全没有括号会怎样?
工具会报告「全部匹配」,因为没有任何开括号或闭括号可供标记为问题——结果为空说明没有发现问题,而不是检查失败。
它能分辨出是闭括号多了还是开括号少了吗?
可以间接分辨:多余的、找不到对应开括号的闭括号会被标记为「未匹配的闭括号」;而开了却一直没被闭合的括号会被标记为「未闭合的开括号」——这样你就能判断问题出在哪一侧。
对压缩成一行的代码也能用吗?
可以——扫描是逐字符进行的,跟换行无关,不过这种情况下报告的列号会比行号更有参考价值,因为压缩代码通常只有一行,但会非常长。
这能替代编辑器自带的括号匹配功能吗?
不完全能——编辑器的括号匹配通常是语言感知的,会在你输入时实时高亮配对;而这个工具是对粘贴文本做一次性扫描,更适合你手头没打开编辑器,或者想要一份列出所有问题的纯文本报告的场景。