首页 > 代码库 > ES6系列,4.正则的扩展

ES6系列,4.正则的扩展

(1)RegExp构造函数
  ES5中,RegExp构造函数有两种:第一种参数是字符串,这时第二个参数表示
  正则表达式的修饰符(flag)。
    var regex = new RegExp(‘xyz‘, ‘i‘);
    // 等价于
    var regex = /xyz/i;
  第二种参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝:
    var regex = new RegExp(/xyz/i); // 等价于 var regex = /xyz/i;
  但不允许此时用第二个参数;
  ES6规定,第一个参数是正则对象,也可以用第二个加修饰符,并且会掩
  盖原来的修饰符:
    new RegExp(/abc/ig, ‘i‘).flags //i
    flags就是修饰符,i代表不区分大小写
(2)字符串的正则方法
  字符串对象共有4个方法,可以使用正则表达式:
    match()、replace()、search()、split()
  ES6将这4个方法,全部定义在RegExp对象上。
(3)u修饰符
  ES6对正则表达式添加了u修饰符,含义为“Unicode模式”,用来正
  确处理大于\uFFFF的Unicode字符:
    /^\uD83D/u.test(‘\uD83D\uDC2A‘) // false
    /^\uD83D/.test(‘\uD83D\uDC2A‘) // true
    \uD83D\uDC2A是一个字符,加u之后可以识别。
  用u字符,同时带来一下问题
    ‘ . ‘字符代表所有字符,码点大于0xFFFF的,必须用u修饰符;
    Unicode用大括号表示,必须用u才能被识别;
    使用u修饰符,两次才会识别大于0x的Uni字符;
      /吉{2}/.test(‘吉吉‘) // false
      /吉{2}/u.test(‘吉吉‘) // true
    u字符更加严格,可以识别不规范的字符。
(4)y修饰符
  ES6新增y修饰符,叫做粘连修饰符,y修饰符与g修饰符相同,都是全局
  匹配,只不过y是紧跟下一个位置开始,g是后面存在即可:
    var s = ‘aaa_aa_a‘;
    var r1 = /a+/g;
    var r2 = /a+/y;
    r1.exec(s) // ["aaa"]
    r2.exec(s) // ["aaa"]
    r1.exec(s) // ["aa"]
    r2.exec(s) // null
  由于使用y修饰符,返回null;
(5)sticky属性
  ES6新增sticky属性,来判断是否存在y修饰符:
    var r = /hello\d/y; r.sticky // true
(6)flags属性
  新增flags属性,返回正则表达式的修饰符;
  ES5的source返回正则表达式的正文:
    /abc/ig.source //abc
    /abc/ig.flags //ig
(7)s 修饰符:dotAll 模式
  ES5中,‘ . ‘代表一切单字符 ,但是以下除外:
  换行符(\n) 回车符(\r)
  ES6新增s修饰符,即dotAll 模式, . 表示任何字符
    /foo.bar/.test(‘foo\nbar‘) //false
    /foo.bar/s.test(‘foo\nbar‘) // true
  同时增加dotAll属性,返回是否处于dotAll 模式:
    const re = /foo.bar/s;
    re.dotAll // true
  /s修饰符和多行修饰符/m不冲突,两者一起使用的情况下,.匹配所有字符,
  而^和$匹配每一行的行首和行尾。

ES6系列,4.正则的扩展