Web 平台 API / glob · 文件路径的迷你匹配语言 待审核 6 页

glob · 文件路径的迷你匹配语言

**/*.test.tsfiles.exclude 里的 **/node_modules.gitignore 里的 dist/ —— 写配置时天天在用的这种「带星号的路径」叫 glob pattern。它不是正则:为「文件路径」这种 / 分段的字符串量身定做,规则不多,但有几条高频易错的语义—— * 不跨 /dotfile 默认不命中** 必须单独成段才有跨段语义。本系列把每条规则做成可动手验证的 demo:全部匹配都由本仓库的真实实现 @vega/parsing/glob 驱动,第 05 页 (引擎) 直接拆开它的管线—— glob AST 怎么转译成 regex、再交给 @vega/parsing/regex 引擎执行。阅读 05 页前建议先了解 regex 系列的基础语法。

一句话入门:

日常写 glob,记住 **/*.{ts,tsx} 这一条的结构就够了—— **/ 管「任意层目录」,* 管「段内任意文件名」,{a,b} 管「多选一」。其余各页讲的是它们的精确语义与各工具的差异。 01 · 单段通配

星号、问号与字符集:一段之内怎么配

glob 的三个基本通配:* 段内任意、? 单字符、[...] 字符集,以及它们为何都不跨路径分隔符。

02 · globstar

globstar:跨目录通配

** 单独成段时匹配零个或多个路径段;与字面量混写则退化为普通 *,各实现在这一点上并不一致。

03 · {} 与 extglob

brace 多选一与 extglob 方言差异

花括号一条 pattern 多选一,转译后成为正则分支;extglob 的带量词分组则是 bash 与 minimatch 的扩展。

04 · dotfile 与 ignore

dotfile 规则与「排除」的三种写法

通配默认不匹配以点开头的段;「排除」在 node-glob、gitignore 与 VS Code 里是三套完全不同的表达。

05 · 引擎

真实管线:parseGlob → AST → regex 源串 → 引擎执行

拆开本仓库 glob 实现的管线:分词、AST、转译成正则、执行,以及不经正则的双指针写法。

06 · 速查与差异

速查表:语法 · 工具差异 · 常用配方 · 易错点

glob 的语法总表、五家实现的差异对照,以及一组常用 pattern 配方。

和别的系列串起来看:

glob 引擎那页的「转译成 regex」正对接 regex 系列的语法页—— glob 本质是一门刻意收窄的正则子集(没有反向引用,但相邻通配之间仍可能回溯爆炸),它的 * 回溯单步和 字符串匹配里的暴力对齐一脉相承;而「pattern → 状态机」的视角见 有限自动机

🔗 相关链接

📐 规范 / 权威实现

  • glob(7) · Linux man-pages · man7.org glob 没有单一官方规范,这份 man page 覆盖的是最基础的一层:* ? [...] 的精确语义、不跨 / 与 dotfile 规则,本系列 01 / 04 页的口径与它一致。**{a,b} 都在它之外,属各家方言;它讲的 POSIX 命名字符类本仓库实现亦未收录。
  • picomatch · github.com 被 Jest / rollup / chokidar 等数百万项目依赖的 JS glob 匹配内核,把 pattern 编译成 RegExp。它和 minimatch 是「glob → 正则」这条路线的两个权威实现,05 页讲的 @vega/parsing/glob 同属此列。

🧭 延伸阅读

  • Glob Patterns Reference · code.visualstudio.com VS Code 官方的 glob 语法参考:files.exclude / search.exclude / 文件关联里各支持什么、大小写敏感性规则。本系列 01 / 02 / 04 页的语法口径与它对照。
  • node-glob · github.com JS 世界的标准 glob 实现 (npm 周下载量数亿),README 的「Glob Primer」是最好的语义讲义:dot 规则、** 与 symlink、Windows 路径、全套 options。本系列的匹配语义对齐它的主干。
  • minimatch · github.com node-glob 体内的匹配内核:把 glob 编译成 RegExp 的真实工程实现,05 页讲的 @vega/parsing/glob 走的正是同一条路线。
  • gitignore 文档 · git-scm.com 最常被混淆的「glob 方言」:尾随 / 表目录、! 重新包含、无 / 的 pattern 在任意层生效——和 node-glob 的差异见 04 / 06 页。
  • Bash Manual · Pattern Matching · gnu.org glob 的源头:shell 文件名展开的权威定义,extglob 五种形式与 globstar 选项都在这。
  • Globster · glob 在线试验场 · globster.xyz 输入 pattern 与一棵文件树,实时看命中——和本系列 02 页同款交互,适合拿真实项目的文件清单去试。