Blame view

node_modules/stylus/lib/functions/match.js 1008 Bytes
ce4c83ff   wxy   初始提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  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
   */
  
  module.exports = 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);
  };
  
  function validateFlags(flags) {
    flags = flags && flags.string;
  
    if (flags) {
      return flags.split('').every(function(flag) {
        return ~VALID_FLAGS.indexOf(flag);
      });
    }
    return false;
  }