glob minimatch picomatch nodejs web-development patterns

Web 通配符匹配指南:Glob, Minimatch 和 Picomatch

掌握 Web 开发中的 Glob 通配符模式。本指南详细介绍了 Glob, Minimatch 和 Picomatch 的语法。包含常见示例、语法速查表(Cheat Sheet)和在线 Glob 测试工具推荐。

2026-04-11

Web 通配符匹配指南:精准掌握文件筛选

在现代 Web 开发中,从庞大的代码库中筛选特定的文件或目录是一项频繁的任务。无论是在配置 Webpack 等构建工具,还是在 ESLint 中设置 linting 规则,亦或是在 Node.js 脚本中定义搜索路径,您都极有可能在使用 Glob 模式(Glob Patterns)

本指南涵盖了 Glob 匹配的核心知识,重点介绍最流行的 JavaScript 库:GlobMinimatchPicomatch。我们将深入探讨 语法(Syntax),提供速查表(Cheat Sheet),并解释为什么使用**在线测试工具(Tester Online)游乐场(Playground)**是掌握这些模式的关键。


1. 什么是 Glob 模式?

Glob 模式(或称 Globs)是用于匹配文件和目录名称的字符串。与正则表达式(Regex)不同(Regex 旨在字符串内进行复杂搜索),Globs 专为文件系统路径优化。它们的语法比 Regex 更简单,但在处理文件匹配任务时却异常强大。

大多数基于 JavaScript 的工具在底层使用 minimatchmicromatchpicomatch 等库来处理这些模式。


2. Glob 模式的核心语法

理解基本字符是掌握 Glob 模式的第一步。

  • * (星号):匹配单个目录层级内的任意数量字符。
    • 示例:src/*.js 匹配 src/app.js 但不匹配 src/utils/math.js
  • ** (双星号/Globstar):跨多个目录层级匹配任意数量字符。
    • 示例:src/**/*.js 匹配 src/app.jssrc/utils/math.js 以及 src/components/button/index.js
  • ? (问号):精确匹配一个字符。
    • 示例:test/file?.js 匹配 test/file1.js 但不匹配 test/file10.js
  • [ ] (字符类):匹配方括号内的任意一个字符。
    • 示例:config/[abc].json 匹配 config/a.jsonconfig/b.jsonconfig/c.json
  • { } (大括号扩展):匹配逗号分隔的模式列表。
    • 示例:src/**/*.{js,ts} 匹配所有递归下的 .js.ts 文件。
  • ! (取反):排除匹配后续模式的文件。
    • 示例:src/**/*.js 结合 !src/**/*.test.js 将选中除测试文件外的所有 JS 文件。

3. Minimatch vs. Picomatch vs. Glob

虽然基本语法大致相同,但这些流行的库之间存在细微差别:

Glob (Node-glob)

Node.js 中最原始、使用最广泛的通配符库。它会执行实际的文件系统遍历。

  • 优势:直接处理文件系统交互。

Minimatch

npm 自身使用的通配符匹配器。它是一个简单的字符串匹配器,不直接与文件系统交互。

  • 优势:可靠、经过大量实战检验,被数百万个项目使用。

Picomatch

Minimatch 的一个更新、更快、更轻量级的替代方案。它常被用在 micromatch 内部。

  • 优势:高性能,并严格遵循 POSIX 标准。

4. 常见的 Glob 模式示例

目标 模式
根目录下所有 JS 文件 *.js
src 目录下所有 JS 文件 src/*.js
递归匹配 dist 目录下所有文件 dist/**/*
匹配所有图片格式 (png, jpg, webp) images/**/*.{png,jpg,webp}
排除 node_modules 的所有内容 !(node_modules)/**/*
匹配 file1.jsfile9.js file[1-9].js

5. 为什么使用在线 Glob 测试工具或游乐场?

Glob 模式可能很棘手,尤其是涉及嵌套大括号和双星号时。使用**在线测试工具(Tester Online)游乐场(Playground)**是确保模式按预期工作的最佳方式。

  1. 可视化验证在线测试工具会显示示例文件列表,并实时高亮显示哪些文件与您的模式匹配。
  2. 语法高亮:许多游乐场为 Globs 提供语法高亮,使您更容易发现未匹配的大括号或放错位置的星号。
  3. 切换匹配引擎:某些测试器允许您在 MinimatchPicomatchGlob 引擎之间切换,以查看行为差异。
  4. 学习环境游乐场是一个安全的实验场所,您可以在其中尝试复杂的取反和扩展逻辑,而不会意外删除本地文件。
  5. 调试共享配置:如果您的 .gitignore.eslintignore 不起作用,您可以将模式粘贴到在线测试器中验证逻辑。

6. 常见问题 (FAQ)

问:*** 有什么区别?

* 仅在一个目录层级内匹配。**(globstar)递归匹配任意数量的子目录。

问:为什么我的 Glob 模式不匹配隐藏文件?

:大多数通配符库默认排除以点开头的隐藏文件(如 .env)。您通常需要开启 dot: true 选项,或使用类似 **/.* 的模式来包含它们。

问:Glob 语法和正则表达式相同吗?

:不同。虽然它们共享一些符号(如 *),但含义完全不同。在正则中,* 意为“零个或多个前一字符”;而在 Globs 中,它意为“路径段中的任意字符”。


7. 相关工具

需要可靠的 Glob 在线测试工具?我们正在 Tool3M 构建一个高性能的 Glob 游乐场 (Glob Playground),支持 Picomatch 和 Minimatch 等多种引擎。

在此期间,如果您正在处理复杂的数据 ID,可以查看我们的 UUID 生成器,为您的测试文件生成唯一的标识符。