ES6标准入门之正则表达式的拓展

  所谓正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。在之前使用基于Jquery库开发项目的时候,用的正则表达式最多的就是一些输入框的检验,比如检验电话号码或者邮箱的格式是否合适等。

  在ES5中,RegExp构造函数的参数有两种情况:

  一、参数是字符串,这是第二个参数标识正则表达式的修饰符(flag)。

  var regex = new RegExp('xyz', 'i');

  //  等价于 var regex = /xyz/i;

  二、参数是一个正则表达式,这时会返回一个原有正则表达式的拷贝。

  var regex = new RegExp( /xyz/i) ;

  //  等价于 var regex = /xyz/i;

  但是ES5不允许此时使用第二个参数添加修饰符,即第一种方式,否则就会报错。ES6改变了这种行为,如果RegExp构造函数第一个参数是正则表达式,那么可以使用第二个参数指定修饰符。而且,返回的正则表达式会忽略原有正则表达式的修饰符,只有重新指定。下面为大家介绍一下ES6对正则表达式新增的各种修饰符:

  1、u修饰符

  ES6对正则表达式添加u修饰符,含义为“Unicode模式”,用来正确处理大于\uFFFF的Unicode字符,也就是说可以正确处理4个字节的UTF-16编码。

  2、y修饰符

  y修饰符又叫粘连,与g修饰符类似,都是从上一次匹配成功的下一个位置开始,只不过y修饰符会确保匹配必须从剩余的第一个位置开始。

  3、s修饰符

  s修饰符就是doAll模式,字符串中所有的字符都匹配,包括换行符(\n)、回车符(\r)等。

  介绍完各种修饰符之后,为大家重点介绍具名组匹配,简而言之就是正则表达式使用圆括号进行组匹配,先看下面一段代码

  

  
 const RE_DATA = /(\d{4})-(\d{2})-(\d{2})/;
const maset = RE_DATA.exec('1999-12-31');
console.log(maset[1]);
console.log(maset[2]);
console.log(maset[3]); //
//
//

组匹配

  看完这段代码是不是觉得之前自己处理时间的时候白白写了很多代码,反正我是这样觉得的,我一直都是对后台传给我的时间字段进行split分隔,显得很low,有了组匹配是不是高大上了很多,嘿嘿。

  所谓具名组匹配就是在圆括号内部,在模式的头部添加“问号 + 尖括号 + 组名”,然后在exec方法中返回结果的groups属性上引用该组名,看下面代码

  
 const RE_DATA_REG = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;

 const maset_re = RE_DATA_REG.exec('1999-12-31');

 console.log(maset_re.groups.year);
console.log(maset_re.groups.year);
console.log(maset_re.groups.year); //
//
//
上一篇:c#代码阅读


下一篇:在 Kubernetes Ingress 中支持 Websocket/Socket 服务