1 # expand-brackets [![NPM version](https://img.shields.io/npm/v/expand-brackets.svg?style=flat)](https://www.npmjs.com/package/expand-brackets) [![NPM monthly downloads](https://img.shields.io/npm/dm/expand-brackets.svg?style=flat)](https://npmjs.org/package/expand-brackets) [![NPM total downloads](https://img.shields.io/npm/dt/expand-brackets.svg?style=flat)](https://npmjs.org/package/expand-brackets) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/expand-brackets.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/expand-brackets) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/expand-brackets.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/expand-brackets)
3 > Expand POSIX bracket expressions (character classes) in glob patterns.
7 Install with [npm](https://www.npmjs.com/):
10 $ npm install --save expand-brackets
16 var brackets = require('expand-brackets');
17 brackets(string[, options]);
22 The main export is a function that takes the following parameters:
24 * `pattern` **{String}**: the pattern to convert
25 * `options` **{Object}**: optionally supply an options object
26 * `returns` **{String}**: returns a string that can be used to create a regex
31 console.log(brackets('[![:lower:]]'));
37 ### [brackets](index.js#L29)
39 Parses the given POSIX character class `pattern` and returns a
40 string that can be used for creating regular expressions for matching.
44 * `pattern` **{String}**
45 * `options` **{Object}**
46 * `returns` **{Object}**
48 ### [.match](index.js#L54)
50 Takes an array of strings and a POSIX character class pattern, and returns a new array with only the strings that matched the pattern.
55 var brackets = require('expand-brackets');
56 console.log(brackets.match(['1', 'a', 'ab'], '[[:alpha:]]'));
59 console.log(brackets.match(['1', 'a', 'ab'], '[[:alpha:]]+'));
65 * `arr` **{Array}**: Array of strings to match
66 * `pattern` **{String}**: POSIX character class pattern(s)
67 * `options` **{Object}**
68 * `returns` **{Array}**
70 ### [.isMatch](index.js#L100)
72 Returns true if the specified `string` matches the given brackets `pattern`.
77 var brackets = require('expand-brackets');
79 console.log(brackets.isMatch('a.a', '[[:alpha:]].[[:alpha:]]'));
81 console.log(brackets.isMatch('1.2', '[[:alpha:]].[[:alpha:]]'));
87 * `string` **{String}**: String to match
88 * `pattern` **{String}**: Poxis pattern
89 * `options` **{String}**
90 * `returns` **{Boolean}**
92 ### [.matcher](index.js#L123)
94 Takes a POSIX character class pattern and returns a matcher function. The returned function takes the string to match as its only argument.
99 var brackets = require('expand-brackets');
100 var isMatch = brackets.matcher('[[:lower:]].[[:upper:]]');
102 console.log(isMatch('a.a'));
104 console.log(isMatch('a.A'));
110 * `pattern` **{String}**: Poxis pattern
111 * `options` **{String}**
112 * `returns` **{Boolean}**
114 ### [.makeRe](index.js#L145)
116 Create a regular expression from the given `pattern`.
121 var brackets = require('expand-brackets');
122 var re = brackets.makeRe('[[:alpha:]]');
124 //=> /^(?:[a-zA-Z])$/
129 * `pattern` **{String}**: The pattern to convert to regex.
130 * `options` **{Object}**
131 * `returns` **{RegExp}**
133 ### [.create](index.js#L187)
135 Parses the given POSIX character class `pattern` and returns an object with the compiled `output` and optional source `map`.
140 var brackets = require('expand-brackets');
141 console.log(brackets('[[:alpha:]]'));
142 // { options: { source: 'string' },
143 // input: '[[:alpha:]]',
146 // { eos: [Function],
150 // escape: [Function],
152 // posix: [Function],
153 // bracket: [Function],
154 // 'bracket.open': [Function],
155 // 'bracket.inner': [Function],
156 // 'bracket.literal': [Function],
157 // 'bracket.close': [Function] },
158 // output: '[a-zA-Z]',
162 // nodes: [ [Object], [Object], [Object] ] },
163 // parsingErrors: [] }
168 * `pattern` **{String}**
169 * `options` **{Object}**
170 * `returns` **{Object}**
174 ### options.sourcemap
176 Generate a source map for the given pattern.
181 var res = brackets('[:alpha:]', {sourcemap: true});
183 console.log(res.map);
185 // sources: [ 'brackets' ],
187 // mappings: 'AAAA,MAAS',
188 // sourcesContent: [ '[:alpha:]' ] }
191 ### POSIX Character classes
193 The following named POSIX bracket expressions are supported:
195 * `[:alnum:]`: Alphanumeric characters (`a-zA-Z0-9]`)
196 * `[:alpha:]`: Alphabetic characters (`a-zA-Z]`)
197 * `[:blank:]`: Space and tab (`[ t]`)
198 * `[:digit:]`: Digits (`[0-9]`)
199 * `[:lower:]`: Lowercase letters (`[a-z]`)
200 * `[:punct:]`: Punctuation and symbols. (`[!"#$%&'()*+, -./:;<=>?@ [\]^_``{|}~]`)
201 * `[:upper:]`: Uppercase letters (`[A-Z]`)
202 * `[:word:]`: Word characters (letters, numbers and underscores) (`[A-Za-z0-9_]`)
203 * `[:xdigit:]`: Hexadecimal digits (`[A-Fa-f0-9]`)
205 See [posix-character-classes](https://github.com/jonschlinkert/posix-character-classes) for more details.
209 * [equivalence classes](https://www.gnu.org/software/gawk/manual/html_node/Bracket-Expressions.html) are not supported
210 * [POSIX.2 collating symbols](https://www.gnu.org/software/gawk/manual/html_node/Bracket-Expressions.html) are not supported
218 * The main export now returns the compiled string, instead of the object returned from the compiler
222 * Adds a `.create` method to do what the main function did before v2.0.0
226 In addition to performance and matching improvements, the v0.2.0 refactor adds complete POSIX character class support, with the exception of equivalence classes and POSIX.2 collating symbols which are not relevant to node.js usage.
230 * parser is exposed, so that expand-brackets parsers can be used by upstream parsers (like [micromatch](https://github.com/jonschlinkert/micromatch))
231 * compiler is exposed, so that expand-brackets compilers can be used by upstream compilers
234 **source map example**
237 var brackets = require('expand-brackets');
238 var res = brackets('[:alpha:]');
239 console.log(res.map);
242 sources: [ 'brackets' ],
244 mappings: 'AAAA,MAAS',
245 sourcesContent: [ '[:alpha:]' ] }
252 * [braces](https://www.npmjs.com/package/braces): Fast, comprehensive, bash-like brace expansion implemented in JavaScript. Complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) | [homepage](https://github.com/jonschlinkert/braces "Fast, comprehensive, bash-like brace expansion implemented in JavaScript. Complete support for the Bash 4.3 braces specification, without sacrificing speed.")
253 * [extglob](https://www.npmjs.com/package/extglob): Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob… [more](https://github.com/jonschlinkert/extglob) | [homepage](https://github.com/jonschlinkert/extglob "Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.")
254 * [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.")
255 * [nanomatch](https://www.npmjs.com/package/nanomatch): Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash… [more](https://github.com/jonschlinkert/nanomatch) | [homepage](https://github.com/jonschlinkert/nanomatch "Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash 4.3 wildcard support only (no support for exglobs, posix brackets or braces)")
259 Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
263 | **Commits** | **Contributor**<br/> |
265 | 66 | [jonschlinkert](https://github.com/jonschlinkert) |
266 | 2 | [MartinKolarik](https://github.com/MartinKolarik) |
267 | 2 | [es128](https://github.com/es128) |
268 | 1 | [eush77](https://github.com/eush77) |
272 _(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
274 To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
277 $ npm install -g verb verb-generate-readme && verb
282 Install dev dependencies:
285 $ npm install -d && npm test
292 * [github/jonschlinkert](https://github.com/jonschlinkert)
293 * [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
297 Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
298 Released under the [MIT license](https://github.com/jonschlinkert/expand-brackets/blob/master/LICENSE).
302 _This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on December 12, 2016._