1 | var utils = require('../utils')
|
---|
2 | , nodes = require('../nodes');
|
---|
3 |
|
---|
4 | var VALID_FLAGS = 'igm';
|
---|
5 |
|
---|
6 | /**
|
---|
7 | * retrieves the matches when matching a `val`(string)
|
---|
8 | * against a `pattern`(regular expression).
|
---|
9 | *
|
---|
10 | * Examples:
|
---|
11 | * $regex = '^(height|width)?([<>=]{1,})(.*)'
|
---|
12 | *
|
---|
13 | * match($regex,'height>=sm')
|
---|
14 | * // => ('height>=sm' 'height' '>=' 'sm')
|
---|
15 | * // => also truthy
|
---|
16 | *
|
---|
17 | * match($regex, 'lorem ipsum')
|
---|
18 | * // => null
|
---|
19 | *
|
---|
20 | * @param {String} pattern
|
---|
21 | * @param {String|Ident} val
|
---|
22 | * @param {String|Ident} [flags='']
|
---|
23 | * @return {String|Null}
|
---|
24 | * @api public
|
---|
25 | */
|
---|
26 |
|
---|
27 | function match(pattern, val, flags){
|
---|
28 | utils.assertType(pattern, 'string', 'pattern');
|
---|
29 | utils.assertString(val, 'val');
|
---|
30 | var re = new RegExp(pattern.val, validateFlags(flags) ? flags.string : '');
|
---|
31 | return val.string.match(re);
|
---|
32 | }
|
---|
33 | match.params = ['pattern', 'val', 'flags'];
|
---|
34 | module.exports = match;
|
---|
35 |
|
---|
36 | function validateFlags(flags) {
|
---|
37 | flags = flags && flags.string;
|
---|
38 |
|
---|
39 | if (flags) {
|
---|
40 | return flags.split('').every(function(flag) {
|
---|
41 | return ~VALID_FLAGS.indexOf(flag);
|
---|
42 | });
|
---|
43 | }
|
---|
44 | return false;
|
---|
45 | }
|
---|