Source: regexp/index.js

/**
 * @name index.js<lib/regexp>
 * @author Yuhei Aihara <aihara_yuhei@cyberagent.co.jp>
 * copyright (c) Cyberagent Inc.
 * @overview regexp library
 */

/**
 * @name regexp
 * @namespace regexp
 */
module.exports = {
    /**
     * Wild card path to string of regular expression for
     * @param str {String} wild card path
     * @example
     * var str = '/a/aa/*.js';
     * console.log(wildcardPath2regexp(str));
     * >> '(/a/aa/[^\\/]*\\.js)$'
     * @returns {String}
     */
    wildcardPath2regexp: function (str) {
        str = str.replace(/\./g, '\\.');
        str = str.replace(/^\*|([^\\])\*/g, '$1[^\\/]*');
        str = str.replace(/^\?|([^\\])\?/g, '$1[^\\/]');
        if(str.length) {
            str = '(' + str + ')$';
        }
        return str;
    },
    /**
     * Wild card path in the array to regular expression
     * @param arr {Array}
     * @example
     * var arr = [ '/a/aa/*.js', '/b/bb/*.css' ];
     * console.log(array2regexp(arr));
     * >> /(/a/aa/[^\/]*\.js|/b/bb/[^\/]*\.css)$/
     * console.log(array2regexp([]));
     * >> /(:)/
     * @returns {RegExp}
     */
    array2regexp: function (arr) {
        var str = arr.join('|');
        return new RegExp(this.wildcardPath2regexp(str) || '(:)');
    }
};