123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /*!
- * is-glob <https://github.com/jonschlinkert/is-glob>
- *
- * Copyright (c) 2014-2017, Jon Schlinkert.
- * Released under the MIT License.
- */
- var isExtglob = require('is-extglob');
- var chars = { '{': '}', '(': ')', '[': ']'};
- var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
- var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
- module.exports = function isGlob(str, options) {
- if (typeof str !== 'string' || str === '') {
- return false;
- }
- if (isExtglob(str)) {
- return true;
- }
- var regex = strictRegex;
- var match;
- // optionally relax regex
- if (options && options.strict === false) {
- regex = relaxedRegex;
- }
- while ((match = regex.exec(str))) {
- if (match[2]) return true;
- var idx = match.index + match[0].length;
- // if an open bracket/brace/paren is escaped,
- // set the index to the next closing character
- var open = match[1];
- var close = open ? chars[open] : null;
- if (open && close) {
- var n = str.indexOf(close, idx);
- if (n !== -1) {
- idx = n + 1;
- }
- }
- str = str.slice(idx);
- }
- return false;
- };
|