49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/*!
 | 
						|
 * 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;
 | 
						|
};
 |