minimatch っていうのは Grunt や gulp.js その他あちこちで(npm もらしい)使われてるグロブマッチライブラリです。最近よく gulp を使ってるんだけど、毎回 gulp.src()
の書き方で迷ってしまう。調べた結果 minimatch に行き当たったんだけど各種 glob 実装のドキュメント読んで把握しろ、という感じでよく分からなかったので早見表を作った次第です。
https://github.com/motemen/minimatch-cheat-sheet
確認用にテストを書いていて、そのテストケースからドキュメントを生成してるので間違いはないはずです。説明が間違ってる、この例も乗せた方が見やすいだろ、とかあればプルリクください。
折角なので日本語版を書いておきますね。
基本
*
はパスセパレータを含まない任意の文字列にマッチ
**
はパスセパレータを含む任意の文字列にマッチ
?
はパスセパレータでない任意の1文字にマッチ
パターン |
マッチする |
マッチしない |
xxx.* |
xxx.yyy , xxx.y.z |
abcxxx.yyy , xxx.y/z |
xxx/*/yyy |
xxx/abc/yyy |
xxx/yyy , xxx/abc/def/yyy , xxx/.abc/yyy |
xxx/**/yyy |
xxx/abc/yyy , xxx/yyy , xxx/abc/def/yyy |
xxx/.abc/yyy |
xxx/**yyy |
xxx/yyy |
xxx/abc/yyy , xxx/abc/def/yyy , xxx/.abc/yyy |
x?y |
xAy |
xy , xABy , x/y |
ブレース
{foo,bar}
は "foo" と "bar" に展開
{1..3}
は "1", "2", "3" に展開
パターン |
マッチする |
マッチしない |
{foo,bar} |
foo , bar |
baz |
{x,y/*}/z |
x/z , y/a/z |
y/z |
foo{1..3} |
foo1 , foo2 , foo3 |
foo , foo0 |
否定
パターン |
マッチする |
マッチしない |
!abc |
a , xyz |
abc |
コメント
#
で始まるパターンはコメントとみなされて何にもマッチしない
\#
とすることでエスケープできる
パターン |
マッチする |
マッチしない |
#abc |
|
abc , #abc |
\#abc |
#abc |
abc |
extglob
+(pattern)
は pattern の1回以上の繰り返し (/(pattern)+/
)
*(pattern)
は pattern の0回以上の繰り返し (/(pattern)*/
)
?(pattern)
は pattern の0回または1回の出現 (/(pattern)?/
)
@(pattern)
は pattern そのもの (/(pattern)/
)
!(pattern)
は pattern にマッチしないというパターン (/(?!pattern)/
)
- カッコ内のパターンは
|
で連結可能 (/(foo|bar)/
)
パターン |
マッチする |
マッチしない |
a+(xy) |
axy , axyxy |
a |
a*(xy) |
a , axy , axyxy |
|
a@(xy) |
axy |
a , axyxy |
a!(xy) |
ax |
axy , axyz |
a+(x|y*z) |
axx , ayzxyzxx , axyAAAz |
axy , a |