2014-06-14 41 views
14

我剛剛發現http://gruntjs.com/configuring-tasks#globbing-patterns,這是我找到的最有用的參考。節點/ JavaScript全局文件/路徑匹配語法,通配符等

我一直看到:

更多關於glob模式語法,請參閱該節點水珠和minimatch文檔。

但是,我似乎無法找到詳盡的語法/用法列表。 These tests可能是最好的參考,但仍然不是特別容易破譯。

看來我必須缺少一些關鍵的文檔來源。

我不知道之間的區別:

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

和有關我可能會忽略其他重要的變化。我猜這適用於node-glob風格匹配('public/**/*.*')和.gitignorenode_modules),因爲前者需要明確包含所有內容,深層次很多,而在gitignore中,這是通過忽略任何內容自動處理的目錄。它是否正確?

回答

13

首先,我從來沒有與node-globminimatch庫合作過。但可能我仍然可以幫忙。有一種已知的用於全局模式匹配的語法,但坦率地說,Google中的快速搜索顯示的並不簡短和清晰。可能這 - http://hgbook.red-bean.com/read/file-names-and-pattern-matching.html#id381184 - 是我找到的最好的資源。維基百科中的文章是詳盡無遺的 - http://en.wikipedia.org/wiki/Glob_(programming)

總之,對於IMHO節點-水珠

  • * - 代表任意數目的一個文件名的字符,但不能放置/
  • ** - 相同*但十字文件夾邊界
  • [abxy] - 可以從列表中替換任何一個字符; [0-9]可以代表任何數量的

因此給你的例子:

  • path/* - 在path所有文件和文件夾不recoursive
  • path/** - 一切都在path recoursively
  • path/*.* - 所有文件和帶名稱的文件夾;匹配a.txt.hiddennoextension.folder.out ...

minimatch文檔 - https://github.com/isaacs/minimatch, - 它確實相同,但採用的正則表達式豐富,稍有難度的語法。你可以在這裏尋找一個綜合性的參考文獻 - http://www.w3schools.com/js/js_regexp.asp。簡而言之,path/.*代表路徑下的任何東西,但不清楚是遞歸還是不行。你可能會測試它。