Node/JavaScript glob файл/синтаксис соответствия шаблонов, подстановочные знаки и т.д.

Я только что нашел http://gruntjs.com/configuring-tasks#globbing-patterns, что является наиболее полезной ссылкой, которую я нашел.

Я все вижу:

Подробнее о синтаксисе шаблона glob см. в документации node -glob и минимализации.

Тем не менее, я не могу найти исчерпывающий список синтаксиса/использования. Эти тесты могут быть наилучшей ссылкой, но все же не особенно легко расшифровать.

Кажется, мне не хватает какого-то важного источника документации.

Мне интересно различие между:

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

и любые другие важные изменения, которые связаны с тем, что я мог бы опустить. Я предполагаю, что это применяется по-разному при выполнении соответствия стиля node-glob ('public/**/*.*') и .gitignore (node_modules), потому что в первом вам нужно явно включать все, много слоев глубоко и в gitignore, это обрабатывается автоматически, игнорируя любой каталог. Правильно ли это?

Ответы

Ответ 1

Прежде всего, я никогда не работал с библиотеками node-glob или minimatch. Но, вероятно, я все еще могу помочь. Там известный синтаксис для сопоставления шаблонов glob, но, откровенно говоря, быстрый поиск в Google не показывает ничего короткого и ясного. Вероятно, это - http://hgbook.red-bean.com/read/file-names-and-pattern-matching.html#id381184 - лучший ресурс, который я нашел. Статья в Википедии является исчерпывающей и нечитаемой - http://en.wikipedia.org/wiki/Glob_(programming).

Короче говоря, IMHO для node -glob:

  • * - обозначает любое количество символов для имени файла, но не может стоять за /
  • ** - то же, что и *, но пересекает границы папок
  • [abxy] - может заменить любой символ из списка; [0-9] может стоять за любое число

Следовательно, к вашему примеру:

  • path/* - все файлы и папки в path не возвращаются
  • path/** - все в path recoursively
  • path/*.* - все файлы и папки с указанием имени; соответствует a.txt, .hidden, noextension., folder.out,...

В документации минимизации - https://github.com/isaacs/minimatch, - он делает то же самое, но использует более богатые и немного более сложные синтаксис Регулярных выражений. Вы можете посмотреть здесь всеобъемлющую ссылку - http://www.w3schools.com/js/js_regexp.asp. Короче говоря, path/.* означает что-либо ниже пути, но неясно, рекурсивный или нет. Возможно, вы можете проверить его.