es6 正则
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中可以通过数组下标的方式单独调出来,但是这样也会有一些问题,比如位置变化,就会导致下标调出来的内容不同。
具名就是给这个圆括号一个变量名,这样我们变量名的方式调用,减少后期代码变动带来的问题。
这个方法甚至可以使用解构的方式调用值,所以还蛮期待的,但是目前还在测试阶段,等等吧。。。
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据