web-dev-qa-db-ja.com

ノード/ JavaScriptグロブファイル/パスマッチング構文、ワイルドカードなど

私が見つけたのは http://gruntjs.com/configuring-tasks#globbing-patterns で、これは私が見つけた中で最も役立つリファレンスです。

私は見続けます:

Globパターンの構文の詳細については、node-globとminimatchのドキュメントを参照してください。

それでも、構文/使用法の完全なリストを見つけることができないようです。 これらのテスト は最良の参照かもしれませんが、それでも解読するのは特に簡単ではありません。

重要なドキュメントのソースが不足しているに違いないようです。

私は間の違いを疑問に思っています:

path
path/
path/*
path/*.*
path/**
path/**/
path/**/*
path/**/*.*

そして、私が省略したかもしれない関連する他の重要なバリエーション。 node-globスタイルマッチング('public/**/*.*')と.gitignorenode_modules)を行う場合、これは異なる方法で適用されると思います。前者では、すべてを明示的に含める必要があるためです。 、多くのレイヤーが深く、gitignoreでは、これはディレクトリを無視することで自動的に処理されます。これは正しいです?

16
Michael Lewis

まず第一に、私はnode-globまたはminimatchライブラリを使ったことがありません。しかし、おそらく私はまだ助けることができます。グロブパターンマッチングには一種のknown構文がありますが、率直に言って、Googleですばやく検索しても短く明確なものは何もありません。おそらくこれ- http://hgbook.red-bean.com/read/file-names-and-pattern-matching.html#id381184 -は私が見つけた最高のリソースです。ウィキペディアの記事は網羅的で読みにくい-- http://en.wikipedia.org/wiki/Glob_(programming)

要するに、node-globのIMHO:

  • *-ファイル名の任意の数の文字を表しますが、/を表すことはできません。
  • ** --*と同じですが、フォルダーの境界を越えます
  • [abxy]-リストの任意の1文字を置き換えることができます。 [0-9]は任意の数を表すことができます

したがって、あなたの例に:

  • path/*-path内のすべてのファイルとフォルダー
  • path/** --path内のすべてが
  • path/*.*-ポイントイン名のすべてのファイルとフォルダー。 a.txt.hiddennoextension.folder.out、..に一致します。

minimatchドキュメントから- https://github.com/isaacs/minimatch 、-同じことをしますが、より豊富に利用します正規表現の少し難しい構文。包括的なリファレンスをここで探すことができます- http://www.w3schools.com/js/js_regexp.asp 。要するに、path/.*はパスの下にあるものを表しますが、再帰的かどうかは明確ではありません。あなたはおそらくそれをテストするかもしれません。

18
Ilia Barahovski