Web 平台 API / glob · 文件路径的迷你匹配语言 / 速查表:语法 · 工具差异 · 常用配方 · 易错点 待审核 6 / 6
06 · 速查与差异

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

一页备查。先是全部语法一张表(标注本仓库实现 @vega/parsing/glob 的支持范围);再把 bash / node-glob / VS Code / .gitignore 与本仓库实现最容易混淆的差异并排;然后一组点选就在文件树上跑的常用配方;最后是高频易错点清单。

1 · 语法总表

图 1-1 · glob 语法总表,逐行给出记号、含义、示例与本仓库实现是否收录。

2 · 五家实现差异(最容易混淆)

图 2-1 · 五家实现的差异对照表。

3 · 常用配方

图 3-1 · 常用 pattern 配方,可逐条在示例文件树上跑一遍看命中范围。

4 · 易错点清单

Windows 反斜杠。glob pattern 里 \ 在 bash、node-glob 与 gitignore 里是转义符,不是路径分隔符——各平台都**只用 /**写 pattern。VS Code 的 glob 不认 \ 转义,要写字面的特殊字符得用方括号(官方例子 src/routes/post/[[]id[]]/**)。node-glob 的 windowsPathsNoEscape 可把 \ 当分隔符,但代价是无法再转义通配符。

**[ ] 当字面量要转义。**文件名里真有方括号时,[ 写成 [[]] 写成 []](或 \[ \]),否则会被当字符集起头而匹配失败或报错(本仓库实现对未闭合的 [ 返回带 pos 的解析错误,见 05 页)。

** 必须独占一段。a**b 不是「跨目录」,而是退化成 a*b(段内)。要跨目录永远是 …/**/… 的形式,两侧带 /

brace 笛卡尔积增长快。{a,b}{1,2}{x,y,z} = 12 条等价 pattern;bash 是真的在匹配前铺开成 N 条,在大目录上配多个 ** + 大 brace,pattern 数 × 遍历量可能失控。

**默认不命中 dotfile,但 gitignore 例外。**从 shell/node-glob 迁移到写 .gitignore 时注意口径变化——gitignore 里 * 会命中 .env 这类文件。需要区分时显式写。

**dir/** 是否含 dir 自身,各实现不一。**node-glob 走盘与 picomatch 算命中,minimatch 的字符串匹配与 gitignore 不算(实测,核对于 2026-08)。只要文件时用 node-glob 的 nodir:true,或在 pattern 末尾要求扩展名 (src/**/*.*)。

**一条能跨工具用的「安全子集」:**只用 * ? ** {} [...],避开 extglob 和 ! 前缀,路径一律 /——这样的 pattern 在 node-glob / VS Code 与本仓库实现里行为基本一致;bash 要先 shopt -s globstar 才认 ** 的跨段语义(macOS 自带的 bash 3.2 根本没有这个选项),[a-z] 在 bash 里还受 locale collation 影响。剩下的差异在 dotfile 与大小写(取决于 OS 或选项)。