lib/utils.js
function pathRegexp (path, keys, sensitive, strict) {
  if (Object.prototype.toString.call(path) == '[object RegExp]') return path;
  if (Array.isArray(path)) path = '(' + path.join('|') + ')';

  path = path
    .concat(strict ? '' : '/?')
    .replace(/\/\(/g, '(?:/')
    .replace(/(\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?(\*)?/g, function(_, slash, format, key, capture, optional, star){
      keys.push({ name: key, optional: !! optional });
      slash = slash || '';
      return ''
        + (optional ? '' : slash)
        + '(?:'
        + (optional ? slash : '')
        + (format || '') + (capture || (format && '([^/.]+?)' || '([^/]+?)')) + ')'
        + (optional || '')
        + (star ? '(/*)?' : '');
    })
    .replace(/([\/.])/g, '\\$1')
    .replace(/\*/g, '(.*)');

  return new RegExp('^' + path + '$', sensitive ? '' : 'i');
}
function pathRegexp (path, keys, sensitive, strict) {
  if (Object.prototype.toString.call(path) == '[object RegExp]') return path;
  if (Array.isArray(path)) path = '(' + path.join('|') + ')';

  path = path
    .concat(strict ? '' : '/?')
    .replace(/\/\(/g, '(?:/')
    .replace(/(\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?(\*)?/g, function(_, slash, format, key, capture, optional, star){
      keys.push({ name: key, optional: !! optional });
      slash = slash || '';
      return ''
        + (optional ? '' : slash)
        + '(?:'
        + (optional ? slash : '')
        + (format || '') + (capture || (format && '([^/.]+?)' || '([^/]+?)')) + ')'
        + (optional || '')
        + (star ? '(/*)?' : '');
    })
    .replace(/([\/.])/g, '\\$1')
    .replace(/\*/g, '(.*)');

  return new RegExp('^' + path + '$', sensitive ? '' : 'i');
}
function pathRegexp ( path , keys , sensitive , strict ) { if ( Object . prototype . toString . call ( path ) == '[object RegExp]' ) return path ; if ( Array . isArray ( path ) ) path = '(' + path . join ( '|' ) + ')' ; path = path . concat ( strict ? '' : '/?' ) . replace ( / \/\( / g , '(?:/' ) . replace ( / (\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?(\*)? / g , function ( _ , slash , format , key , capture , optional , star ) { keys . push ( { name : key , optional : ! ! optional } ) ; slash = slash || '' ; return '' + ( optional ? '' : slash ) + '(?:' + ( optional ? slash : '' ) + ( format || '' ) + ( capture || ( format && '([^/.]+?)' || '([^/]+?)' ) ) + ')' + ( optional || '' ) + ( star ? '(/*)?' : '' ) ; } ) . replace ( / ([\/.]) / g , '\\$1' ) . replace ( / \* / g , '(.*)' ) ; return new RegExp ( '^' + path + '$' , sensitive ? '' : 'i' ) ; }
From Express:
Normalize the given path string,
returning a regular expression.

An empty array should be passed,
which will contain the placeholder
key names. For example "/user/:id" will
then contain ["id"].

@param  {String|RegExp|Array} path
@param  {Array} keys
@param  {Boolean} sensitive
@param  {Boolean} strict
@return {RegExp}
From Express : Normalize the given path string returning a regular expression .