詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

minimatch(node.js で path match するライブラリ)のチートシートを作った

minimatch っていうのは Gruntgulp.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

はてなで一緒に働きませんか?