mirror of https://github.com/jkjoy/sunpeiwen.git
46 lines
1.0 KiB
JavaScript
46 lines
1.0 KiB
JavaScript
|
var utils = require('../utils')
|
||
|
, nodes = require('../nodes');
|
||
|
|
||
|
var VALID_FLAGS = 'igm';
|
||
|
|
||
|
/**
|
||
|
* retrieves the matches when matching a `val`(string)
|
||
|
* against a `pattern`(regular expression).
|
||
|
*
|
||
|
* Examples:
|
||
|
* $regex = '^(height|width)?([<>=]{1,})(.*)'
|
||
|
*
|
||
|
* match($regex,'height>=sm')
|
||
|
* // => ('height>=sm' 'height' '>=' 'sm')
|
||
|
* // => also truthy
|
||
|
*
|
||
|
* match($regex, 'lorem ipsum')
|
||
|
* // => null
|
||
|
*
|
||
|
* @param {String} pattern
|
||
|
* @param {String|Ident} val
|
||
|
* @param {String|Ident} [flags='']
|
||
|
* @return {String|Null}
|
||
|
* @api public
|
||
|
*/
|
||
|
|
||
|
function match(pattern, val, flags){
|
||
|
utils.assertType(pattern, 'string', 'pattern');
|
||
|
utils.assertString(val, 'val');
|
||
|
var re = new RegExp(pattern.val, validateFlags(flags) ? flags.string : '');
|
||
|
return val.string.match(re);
|
||
|
}
|
||
|
match.params = ['pattern', 'val', 'flags'];
|
||
|
module.exports = match;
|
||
|
|
||
|
function validateFlags(flags) {
|
||
|
flags = flags && flags.string;
|
||
|
|
||
|
if (flags) {
|
||
|
return flags.split('').every(function(flag) {
|
||
|
return ~VALID_FLAGS.indexOf(flag);
|
||
|
});
|
||
|
}
|
||
|
return false;
|
||
|
}
|