code: function pathToRegexp (path, keys, options) {
  	  keys = keys || []
  	
  	  if (!isarray(keys)) {
  	    options = /** @type {!Object} */ (keys)
  	    keys = []
  	  } else if (!options) {
  	    options = {}
  	  }
  	
  	  if (path instanceof RegExp) {
  	    return regexpToRegexp(path, /** @type {!Array} */ (keys))
  	  }
  	
  	  if (isarray(path)) {
  	    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)
  	  }
  	
  	  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)
  	}
docs: Normalize the given path string, returning a regular expression.
  
  An empty array can be passed in for the keys, which will hold the
  placeholder key descriptions. For example, using `/user/:id`, `keys` will
  contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
  
  @param  {(string|RegExp|Array)} path
  @param  {(Array|Object)=}       keys
  @param  {Object=}               options
  @return {!RegExp}