ES6-02:正则表达式扩展

ES5中,正则表达式构造函数的参数有两中情况:
①:new RegExp(string,flag);如var reg=new RegExp('xyz','i');
②:new RegExp(regexp);如var reg=new RegExp(/xyz/i);
采用第二种方式创建时,不允许传递第二个参数flag,否则会报错,但ES6允许

1. 字符串的正则方法

字符串对象共有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];

2.RegExp正则表达式修饰符

ES5正则表达式的修饰符有三个:

  • i:case-insensitive,即不区分大小写模式,匹配时忽略大小写;
  • g: global,即全局模式,模式将被引用于所有字符串;
  • m:multiline,即多行模式,在达到一行文本末尾时还会继续查找下一行是否存在匹配项;

ES6新增4个修饰符:

  • y:sticky,即粘连,后一次匹配从上一次匹配成功的下一个位置开始;
  • u:unicode,即UTF-16修饰符,用来处理4个字节(大于uFFFF)的UTF-16编码unnicode字符;
  • s:dotAll,即匹配包括行终止符的任意字符;

3.新增特性

  • 后行断言

JAvaScript语言的正则表达式仅支持现行断言和现行否定断言;ES6提案支持后行断言和后行否定断言;
①先行断言:

/d+(?=%)/.exec('100% of US prisident.'); // ['100'] 仅匹配%之前的数字
/d+(?!%)/.exec('that is to say 33'); //['33'] 仅匹配不在%之前的数字

②后行断言

/(?<=$)d+/.exec('I have $100');//['100'] 仅匹配$符号后面的数字
/(?!$)d+/.exec('It is worth about ¥90');//['90] 仅匹配不在$后面的数字
  • unicode属性
    p{expression}:允许正则表达式匹配符合unicode某种属性的所有字符;
  • 具名组匹配:
    ①ES5 正则表达式允许使用圆括号进行组匹配:
const exp=/(d{4})-(d{2})-(d{2})/;
const res=exp.exec('2017-12-19');
const year=res[1]; // 2017
const month=res[2]; // 12
const day=res[3]; //19

②ES6提案有一个具名组正则匹配表达式

const reg=/(<?year>d{4})-(<?month>d{2})-(<?day>d{2})/;
const res=reg.exec('2017-12-19');
const year=res.group.year;//2017
const month=res.group.month;//12
const day=res.group.day;// 19

③具名组引用k<name>

const reg=/(<?year>d{4})-(<?month>d{2})-k<month>/
const reg.exec('2017-12-19');// ture
原文地址:https://www.cnblogs.com/hbzyin/p/8012296.html