2014-06-14 11 views
14

Właśnie znalazłem http://gruntjs.com/configuring-tasks#globbing-patterns, który jest najbardziej przydatnym odnośnikiem, który znalazłem.Węzeł/JavaScript glob plik/ścieżka dopasowywanie składni, znaki wieloznaczne, itp.

Ciągle widzę:

Więcej informacji na temat składni wzór glob, zobacz Node-glob i dokumentacji minimatch.

Jednak nie mogę znaleźć wyczerpującej listy składni/użycia. These tests może być najlepszym odnośnikiem, ale nadal nie jest szczególnie łatwy do odczytania.

Wygląda na to, że brakuje mi jakiegoś krytycznego źródła dokumentacji.

Zastanawiam różnice między:

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

i innych ważnych zmian, które są związane, że mógłbym pominąć. Zgaduję, że to ma inne zastosowanie, gdy robimy dopasowanie w stylu node-glob ('public/**/*.*') i .gitignore (node_modules), ponieważ w pierwszym przypadku trzeba jawnie zawrzeć wszystko, wiele warstw w głąb, a w gitignore, jest to obsługiwane automatycznie przez ignorowanie dowolnego informator. Czy to jest poprawne?

Odpowiedz

13

Po pierwsze, nigdy nie pracowałem z bibliotekami node-glob lub minimatch. Ale prawdopodobnie wciąż mogę pomóc. Istnieje rodzaj składni o znanej nazwie do dopasowywania wzorców globalnych, ale, szczerze mówiąc, szybkie wyszukiwanie w Google nie pokazuje niczego krótkiego i wyraźnego. Prawdopodobnie to - http://hgbook.red-bean.com/read/file-names-and-pattern-matching.html#id381184 - jest najlepszym zasobem, jaki znalazłem. Artykuł w Wikipedii jest wyczerpujący i nieczytelny - http://en.wikipedia.org/wiki/Glob_(programming).

W skrócie IMHO dla węzła-glob:

  • * - oznacza dowolną liczbę znaków w nazwie pliku, ale nie może stać na /
  • ** - tak samo jak * ale krzyżami granice folderów:
  • [abxy] - można zastąpić dowolny znak z listy; [0-9] może stanąć na dowolną liczbę

Stąd do przykładu:

  • path/* - wszystkie pliki i foldery w path nie recoursive
  • path/** - wszystko w path recoursively
  • path/*.* - wszystkie pliki i foldery z punktem w nazwie; mecze a.txt, .hidden, noextension., folder.out ...

Od minimatch dokumentacja - https://github.com/isaacs/minimatch - robi to samo, ale wykorzystuje bogatszy i nieco trudniejsze składnię wyrażeń regularnych.Możesz odszukać tutaj wyczerpujące odniesienie - http://www.w3schools.com/js/js_regexp.asp. W skrócie, path/.* oznacza wszystko poniżej ścieżki, ale nie jest jasne, czy rekurencyjne czy nie. Prawdopodobnie możesz go przetestować.