47 lines
997 B
JavaScript
47 lines
997 B
JavaScript
|
|
||
|
/**
|
||
|
* Module exports.
|
||
|
*/
|
||
|
|
||
|
module.exports = shExpMatch;
|
||
|
|
||
|
/**
|
||
|
* Returns true if the string matches the specified shell
|
||
|
* expression.
|
||
|
*
|
||
|
* Actually, currently the patterns are shell expressions,
|
||
|
* not regular expressions.
|
||
|
*
|
||
|
* Examples:
|
||
|
*
|
||
|
* ``` js
|
||
|
* shExpMatch("http://home.netscape.com/people/ari/index.html", "*\/ari/*")
|
||
|
* // is true.
|
||
|
*
|
||
|
* shExpMatch("http://home.netscape.com/people/montulli/index.html", "*\/ari/*")
|
||
|
* // is false.
|
||
|
* ```
|
||
|
*
|
||
|
* @param {String} str is any string to compare (e.g. the URL, or the hostname).
|
||
|
* @param {String} shexp is a shell expression to compare against.
|
||
|
* @return {Boolean} true if the string matches the shell expression.
|
||
|
*/
|
||
|
|
||
|
function shExpMatch (str, shexp) {
|
||
|
var re = toRegExp(shexp);
|
||
|
return re.test(str);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Converts a "shell expression" to a JavaScript RegExp.
|
||
|
*
|
||
|
* @api private
|
||
|
*/
|
||
|
|
||
|
function toRegExp (str) {
|
||
|
str = String(str)
|
||
|
.replace(/\?/g, '.')
|
||
|
.replace(/\*/g, '(.*)');
|
||
|
return new RegExp('^' + str + '$');
|
||
|
}
|