以下のようなファイル構造だとします。
.
├── ba
│ └── z.mdx
├── bar
│ └── b.mdx
├── baz
│ └── c.mdx
└── foo
└── a.mdx
3 directories, 3 files
0か複数
*
を使うと0か複数を表せます。
glob('ba*/**/*.mdx', (_, files) => {
console.log(files);
});
これは[ 'ba/z.mdx', 'bar/b.mdx', 'baz/c.mdx' ]
を得ます。*
の部分は無いものでもマッチするのでba
も含まれます。
1か複数
?
を使うと1か複数を表せます。
glob('ba?/**/*.mdx', (_, files) => {
console.log(files);
});
これは[ 'bar/b.mdx', 'baz/c.mdx' ]
を得ます。?
は必ず何かしらの文字列がある必要があるので今度はba
は含まれません。
範囲
[]
で囲むと範囲という意味になります。例えば[a-z]
はa,b,c,d,...
みたいな意味になります。
glob('qqqq/ba[a-z]/**/*.mdx', (_, files) => {
console.log(files);
});
よってこれも[ 'bar/b.mdx', 'baz/c.mdx' ]
を得ます。
完全マッチの複数
@(foo|b?r)
と書くとfoo
かb?r
の時にマッチします。中で?
や*
など使えるので柔軟に複数指定できます。
glob('qqqq/@(foo|bar)/**/*.mdx', (_, files) => {
console.log(files);
});
これは[ 'foo/a.mdx', 'bar/b.mdx' ]
を得ます。
複数マッチの否定
!(foo|bar)
と書くとfoo
かbar
じゃないものにマッチします。
glob('qqqq/!(foo|bar)/**/*.mdx', (_, files) => {
console.log(files);
});
これは[ 'qqqq/baz/c.mdx' ]
を得ます。
何でもいいディレクトリ
**
を使うとディレクトリの名前・どこにあるかに関係なくマッチするようにできます。
glob('**/*.mdx', (_, files) => {
console.log(files);
});
これは[ 'foo/a.mdx', 'bar/b.mdx', 'baz/c.mdx' ]
を得ます。これはhoge/fuga/piyo/a.mdx
というようなファイルであってもマッチします。