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

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

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

1 · 语法总表

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

3 · 常用配方(点一下在文件树上跑)

4 · 易错点清单

Windows 反斜杠。glob pattern 里 \转义符,不是路径分隔符——任何平台都**只用 /**写 pattern。node-glob 的 windowsPathsNoEscape 可把 \ 当分隔符,但代价是无法再转义通配符。

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

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

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

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

目录也算匹配结果。src/**src 目录自身也算命中;只要文件用 node-glob 的 nodir:true,或在 pattern 末尾要求扩展名 (src/**/*.*)。

**一条能跨工具用的「安全子集」:**只用 * ? ** {} [...],避开 extglob 和 ! 前缀,路径一律 /——这样的 pattern 在 bash / node-glob / VS Code 以及本仓库实现里行为基本一致,剩下的差异只在 dotfile 与大小写(取决于 OS 或选项)。