new RegExp 调整

原来es5的时候,new一个正则出来,如果第一参数就是正则,那么只会返回这个正则参数出来,并且是不能使用第二个参数的。

否则就会报错。

es6调整了一下,即便第一个参数是正则,我们也能使用第二个参数给他指定修饰符,这个修饰符会覆盖原来参数自带的修饰符

//传统
const a = new RegExp('one','ig');

//输出 /one/ig

const b = new RegExp(/one/ig);

//输出  /one/ig

//es6

const c = new RegExp(/one/ig,'i');

//输出 /one/i

字符串正则方法

字符串有四个正则方法:match(),replace(),search(),split();

在es5中这四个方法原来都是在String对象下调用的,现在都改为统一调用RegExp对象下的方法

String.prototype.match 调用 RegExp.prototype[Symbol.match]
以此类推

u 修饰符

用于识别16进制的unicode字符,因为16进制的,以前是无法正确识别到的。原来的它会被识别成两个字符,而不是一个字符。

在使用.点字符去适配除了换行符之外所有字符时候,16进制的unicode是无法识别的,必须使用u修饰符

y修饰符

es6新增一个y修饰符,这个和g修饰符类似,也是一个全局的,但是y要求字符匹配要从第一个开始就要匹配到,可以理解为默认加了一个^`开头匹配。

g和y都支持“继续”匹配,也就是在同一个字段变量上,进行正则匹配后,还可以对剩下的字符继续匹配。这种情况一般出现在正则匹配的字符有数量限制的情况下。

并且要注意的是,y并不能匹配到多个,在使用match的时候,使用y只会返回一个,而g是可以返回多个的,y和g可以一起使用。

为此reg对象多了一个sticky属性,用于判断是使用了y修饰符

const reg = /a/y;
reg.sticky; //true

flags属性

在es5中如果我们要判断正则是否使用了某个修饰符,只能对这个正则对象的修饰符属性一个个判断,而es6新增的flags属性可以直接返回修饰符。

const reg = /1/ygi;
reg.flags;  //giy

s修饰符的dotAll模式

.修饰符默认是不能匹配到换行符号(\n)和回车符号(\r),还有行分隔符(U+2028)、段分割符(U+2029);

但是有的情况下我们需要匹配任何字符,所以衍生出一种变通写法:[^]

这种写法表示任意字符了,但是并怎么合理,所以es6提出dotAll模式,也就是点字符可以匹配一切字符。

开启方法就是使用s修饰符,s本来是用于忽略大小写格式的。

为此我们还可以通过新的属性:dotAll判断是否进入到改模式:

const reg = /./s;
reg.dotAll;  //true

注:这种模式使用new方法创建的正则也是可以的。

具名

在es6中有一个新的提案,就是我们es5中使用圆括号包裹的正则匹配到的内容,在exec中可以通过数组下标的方式单独调出来,但是这样也会有一些问题,比如位置变化,就会导致下标调出来的内容不同。

具名就是给这个圆括号一个变量名,这样我们变量名的方式调用,减少后期代码变动带来的问题。

这个方法甚至可以使用解构的方式调用值,所以还蛮期待的,但是目前还在测试阶段,等等吧。。。

分类: ES6 标签: 正则

评论

暂无评论数据

暂无评论数据

目录