123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- module.exports = function (glob, opts) {
- if (typeof glob !== 'string') {
- throw new TypeError('Expected a string');
- }
- var str = String(glob);
-
- var reStr = "";
-
-
-
- var extended = opts ? !!opts.extended : false;
-
-
-
-
-
-
-
-
-
- var globstar = opts ? !!opts.globstar : false;
-
-
- var inGroup = false;
-
- var flags = opts && typeof( opts.flags ) === "string" ? opts.flags : "";
- var c;
- for (var i = 0, len = str.length; i < len; i++) {
- c = str[i];
- switch (c) {
- case "/":
- case "$":
- case "^":
- case "+":
- case ".":
- case "(":
- case ")":
- case "=":
- case "!":
- case "|":
- reStr += "\\" + c;
- break;
- case "?":
- if (extended) {
- reStr += ".";
- break;
- }
- case "[":
- case "]":
- if (extended) {
- reStr += c;
- break;
- }
- case "{":
- if (extended) {
- inGroup = true;
- reStr += "(";
- break;
- }
- case "}":
- if (extended) {
- inGroup = false;
- reStr += ")";
- break;
- }
- case ",":
- if (inGroup) {
- reStr += "|";
- break;
- }
- reStr += "\\" + c;
- break;
- case "*":
-
-
- var prevChar = str[i - 1];
- var starCount = 1;
- while(str[i + 1] === "*") {
- starCount++;
- i++;
- }
- var nextChar = str[i + 1];
- if (!globstar) {
-
- reStr += ".*";
- } else {
-
- var isGlobstar = starCount > 1
- && (prevChar === "/" || prevChar === undefined)
- && (nextChar === "/" || nextChar === undefined)
- if (isGlobstar) {
-
- reStr += "((?:[^/]*(?:\/|$))*)";
- i++;
- } else {
-
- reStr += "([^/]*)";
- }
- }
- break;
- default:
- reStr += c;
- }
- }
-
-
- if (!flags || !~flags.indexOf('g')) {
- reStr = "^" + reStr + "$";
- }
- return new RegExp(reStr, flags);
- };
|