2016-09-20 494 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 

編輯

這奏效了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.js的遞歸循環,直到你打的node_modules的第一個實例,並返回路徑。

+1

謝謝隊友!很好的答案。 – vaughan