2016-09-20 13 views
0

に一致する例例であり、それらが一致するかどうかをしますグロブは浅くここディレクトリ

foo/node_modules -> yep 

foo/bar/node_modules -> yep 

foo/bar/node_modules/baz/node_modules -> matches only foo/bar/node_modules 

foo/node_modules/bar/node_modules -> matches only foo/node_modules 

node_modules/foo/node_modules/bar -> matches only node_modules 

EDIT

これやった深い2つのレベルのためのトリック:

const patterns = [ 
    '*/node_modules', 
    '*/!(node_modules)/node_modules', 
    '*/!(node_modules)/*/node_modules', 
] 

答えて

1

globルールは"(パス区切りで停止する、/)ファイル名のセグメントに適用されます。これは、複数の深度にまたがるワイルドカードの一致を実行できないことを意味します。これは、あなたの質問にとって重要です。

  • ls node_modules
  • ls */node_modules
  • ls */*/node_modules
  • ls */*/*/node_modules
  • など:私は直接、この質問を達成するために見る唯一の方法は、例えば、(そして最初の試合後に停止)多くの検索を使用することです。

しかし、これはaccomplished with a regular expressionことができます:

^.*?node_modules(?=\/|$) 

それとも、あなたはnode_modulesの最初のインスタンスを打つまでのディレクトリを再帰的にループにNode.jsのを使用してパスを返すことができます。

+1

ありがとうございました!素晴らしい答え。 – vaughan

関連する問題