在 ES5 中

RegExp 构造函数的参数有两种情况

  • RegExp(字符串, 正则表达式的修饰符)
  • RegExp(正则表达式);
  • var regex = new RegExp('xyz', 'i');
    
    // 等价于
    var regex = new RegExp(/xyz/i); // 不能再有 第二参数修饰符,否则会报错 // 等价于
    var regex = /xyz/i;
  • lastIndex 属性 指定每次搜索的开始位置,修饰符从这个位置开始向后搜索,直到发现匹配为止
  • const REGEX = /a/g;
    
    REGEX.lastIndex = 2;    // 指定从2号位置(y)开始匹配
    const match = REGEX.exec('xaya'); // 匹配成功
    match.index; // 3 // 在3号位置匹配成功 REGEX.lastIndex; // 4 // 下一次匹配从4号位开始
    REGEX.exec('xaya'); // null // 4号位开始匹配失败

在 ES6 中

如果 RegExp 构造函数第一个参数是一个正则对象,那么还是可以使用第二个参数指定修饰符。

而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符

  • new RegExp(/abc/ig, 'i').flags    // "i"   而不是 'ig'
  • 字符串的正则方法

字符串对象共有 4 个方法,可以使用正则表达式:match()replace()search()split()

ES6 将这 4 个方法,在语言内部全部调用 RegExp 的实例方法,从而做到所有与正则相关的方法,全都定义在 RegExp 对象上

  • String.prototype.match    调用    RegExp.prototype[Symbol.match]
    String.prototype.replace 调用 RegExp.prototype[Symbol.replace]
    String.prototype.search 调用 RegExp.prototype[Symbol.search]
    String.prototype.split 调用 RegExp.prototype[Symbol.split]
  • 添加了 修饰符,含义为“Unicode 模式”,

用来正确处理大于 \uFFFF 的 Unicode 字符。

也就是说,会正确处理四个字节的 UTF-16 编码