# extglob [![NPM version](https://badge.fury.io/js/extglob.svg)](http://badge.fury.io/js/extglob) [![Build Status](https://travis-ci.org/jonschlinkert/extglob.svg)](https://travis-ci.org/jonschlinkert/extglob) > Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to glob patterns. Install with [npm](https://www.npmjs.com/) ```sh $ npm i extglob --save ``` Used by [micromatch](https://github.com/jonschlinkert/micromatch). **Features** * Convert an extglob string to a regex-compatible string. **Only converts extglobs**, to handle full globs use [micromatch](https://github.com/jonschlinkert/micromatch). * Pass `{regex: true}` to return a regex * Handles nested patterns * More complete (and correct) support than [minimatch](https://github.com/isaacs/minimatch) ## Usage ```js var extglob = require('extglob'); extglob('?(z)'); //=> '(?:z)?' extglob('*(z)'); //=> '(?:z)*' extglob('+(z)'); //=> '(?:z)+' extglob('@(z)'); //=> '(?:z)' extglob('!(z)'); //=> '(?!^(?:(?!z)[^/]*?)).*$' ``` **Optionally return regex** ```js extglob('!(z)', {regex: true}); //=> /(?!^(?:(?!z)[^/]*?)).*$/ ``` ## Extglob patterns To learn more about how extglobs work, see the docs for [Bash pattern matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html): * `?(pattern)`: Match zero or one occurrence of the given pattern. * `*(pattern)`: Match zero or more occurrences of the given pattern. * `+(pattern)`: Match one or more occurrences of the given pattern. * `@(pattern)`: Match one of the given pattern. * `!(pattern)`: Match anything except one of the given pattern. ## Related * [braces](https://github.com/jonschlinkert/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) * [expand-brackets](https://github.com/jonschlinkert/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. * [expand-range](https://github.com/jonschlinkert/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See… [more](https://github.com/jonschlinkert/expand-range) * [fill-range](https://github.com/jonschlinkert/fill-range): Fill in a range of numbers or letters, optionally passing an increment or multiplier to… [more](https://github.com/jonschlinkert/fill-range) * [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just… [more](https://github.com/jonschlinkert/micromatch) ## Run tests Install dev dependencies: ```sh $ 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/extglob/issues/new) ## Author **Jon Schlinkert** + [github/jonschlinkert](https://github.com/jonschlinkert) + [twitter/jonschlinkert](http://twitter.com/jonschlinkert) ## License Copyright © 2015 Jon Schlinkert Released under the MIT license. *** _This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 01, 2015._