131 lines
3.4 KiB
Markdown
131 lines
3.4 KiB
Markdown
# parse-glob [](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._
|