所谓正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式一般被用来检索、替换那些符合某个模式(规则)的文本。在以前使用基于Jquery库开发项目的时候,用的正则表达式最多的就是一些输入框的检验,好比检验电话号码或者邮箱的格式是否合适等。正则表达式
在ES5中,RegExp构造函数的参数有两种状况:ide
1、参数是字符串,这是第二个参数标识正则表达式的修饰符(flag)。函数
var regex = new RegExp('xyz', 'i');编码
// 等价于 var regex = /xyz/i;spa
2、参数是一个正则表达式,这时会返回一个原有正则表达式的拷贝。code
var regex = new RegExp( /xyz/i) ;regexp
// 等价于 var regex = /xyz/i;blog
可是ES5不容许此时使用第二个参数添加修饰符,即第一种方式,不然就会报错。ES6改变了这种行为,若是RegExp构造函数第一个参数是正则表达式,那么可使用第二个参数指定修饰符。并且,返回的正则表达式会忽略原有正则表达式的修饰符,只有从新指定。下面为你们介绍一下ES6对正则表达式新增的各类修饰符:开发
一、u修饰符字符串
ES6对正则表达式添加u修饰符,含义为“Unicode模式”,用来正确处理大于\uFFFF的Unicode字符,也就是说能够正确处理4个字节的UTF-16编码。
二、y修饰符
y修饰符又叫粘连,与g修饰符相似,都是从上一次匹配成功的下一个位置开始,只不过y修饰符会确保匹配必须从剩余的第一个位置开始。
三、s修饰符
s修饰符就是doAll模式,字符串中全部的字符都匹配,包括换行符(\n)、回车符(\r)等。
介绍完各类修饰符以后,为你们重点介绍具名组匹配,简而言之就是正则表达式使用圆括号进行组匹配,先看下面一段代码
1 const RE_DATA = /(\d{4})-(\d{2})-(\d{2})/; 2 const maset = RE_DATA.exec('1999-12-31'); 3 console.log(maset[1]); 4 console.log(maset[2]); 5 console.log(maset[3]); 6 7 // 1999 8 // 12 9 // 31
看完这段代码是否是以为以前本身处理时间的时候白白写了不少代码,反正我是这样以为的,我一直都是对后台传给个人时间字段进行split分隔,显得很low,有了组匹配是否是高大上了不少,嘿嘿。
所谓具名组匹配就是在圆括号内部,在模式的头部添加“问号 + 尖括号 + 组名”,而后在exec方法中返回结果的groups属性上引用该组名,看下面代码
1 const RE_DATA_REG = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/; 2 3 const maset_re = RE_DATA_REG.exec('1999-12-31'); 4 5 console.log(maset_re.groups.year); 6 console.log(maset_re.groups.year); 7 console.log(maset_re.groups.year); 8 9 10 // 1999 11 // 12 12 // 31