# parse-glob [![NPM version](https://badge.fury.io/js/parse-glob.svg)](http://badge.fury.io/js/parse-glob) > Parse a glob pattern into an object of tokens. **BREAKING CHANGES in 2.0** - all path-related properties are now on the `path` object - all boolean properties are now on the `is` object - adds `base` property See the [properties](#properties) section for details. ## Install with [npm](npmjs.org) ```bash npm i parse-glob --save ``` - parses 1,000+ glob patterns in 29ms (2.3 GHz Intel Core i7) - Extensive [unit tests](./test.js) (more than 1,000 lines), covering wildcards, globstars, character classes, brace patterns, extglobs, dotfiles and other complex patterns. See the tests for [hundreds of examples](./test.js). ## Usage ```js var parseGlob = require('parse-glob'); parseGlob('a/b/{c,d}/*.js'); ``` **Returns:** ```js { path: { dirname: 'a/b/{c,d}/', filename: '*.js', basename: '*', extname: '.js', ext: 'js' }, is: { glob: true, braces: true, negated: false, globstar: false, dotfile: false, dotdir: false }, original: 'a/b/{c,d}/*.js', pattern: 'a/b/{c,d}/*.js' } ``` ## Properties The object returned by parseGlob has the following properties: - `pattern`: the glob pattern - `base`: when `true` is passed as the second argument, a `base` path is extracted and stripped from `pattern`. See more [below](#base-property) - `original`: a copy of the original, unmodified glob pattern - `path`: file path segments + `path.dirname`: directory + `path.filename`: filename, including extension + `path.basename`: filename, without extension + `path.extname`: file extension, with dot + `path.ext`: file extension, without dot - `is`: an object with boolean information about the glob: + `is.glob`: true if the pattern actually a glob pattern + `is.negated`: true if it's a negation pattern (`!**/foo.js`) + `is.globstar`: true if the pattern has a double star (`**`) + `is.dotfile`: true if the pattern should match dotfiles + `is.dotdir`: true if the pattern should match dot-directories (like `.git`) ### base property The `base` property is created by taking any leading dirname segments in the pattern that do not contain any glob symbols (`!*{}?(|)[]`). If a base cannot be extracted, the value of `base` will be an empty string. **Examples** Without `base` defined: ```js var tokens = parseGlob('a/b/{c,d}/*.js'); // tokens.base => 'undefined' // tokens.pattern => 'a/b/{c,d}/*.js' ``` With `base` defined: ```js var tokens = parseGlob('a/b/{c,d}/*.js', true); // tokens.base => 'a/b' // tokens.pattern => '{c,d}/*.js' ``` The resulting object would be: ```js { path: { dirname: 'a/b/{c,d}/', filename: '*.js', basename: '*', extname: '.js', ext: 'js' }, is: { glob: true, negated: false, globstar: false, dotfile: false, dotdir: false }, original: 'a/b/{c,d}/*.js', pattern: '{c,d}/*.js', base: 'a/b' } ``` ## Run tests Install dev dependencies: ```bash npm i -d && npm test ``` ## Contributing Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/parse-glob/issues) ## Author **Jon Schlinkert** + [github/jonschlinkert](https://github.com/jonschlinkert) + [twitter/jonschlinkert](http://twitter.com/jonschlinkert) ## License Copyright (c) 2015 Jon Schlinkert Released under the MIT license *** _This file was generated by [verb](https://github.com/assemble/verb) on February 17, 2015._