当前位置: 首页 > Web前端 > HTML5

ES6入门正则表达式扩展

时间:2023-04-05 20:31:33 HTML5

1.正则表达式的扩展参数是一个字符串,那么第二个参数代表正则表达式的修饰符,如下:varregex=newRegExp('xyz','i')//等价于varregex=/xyz/i参数是正则表达式,然后返回原始正则表达式的副本。如下:varregex=newRegExp(/xyz/i)//等同于varregex=/xyz/iEs6这种文字已经改过了。如果RegExp构造函数的第一个参数是一个正则对象,那么第二个参数可以指定修饰符,返回的正则表达式会忽略原正则表达式的修饰符,只使用新指定的修饰符。如下:newRegExp(/abc/ig,'i').flags//原来的ig被i覆盖2.字符串的正则方法字符串对象中有4个方法,可以使用正则表达式:match()、替换()、搜索()和拆分()。Es6中调用了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.split3.u修饰符ES6将u修饰符添加到正则表达式中,以正确处理大于uFFFF的Unicode字符。如下:/^\uD83D/u.test('\uD83D\uDC2A')//false/^\uD83D/.test('\uD83D\uDC2A')//true//以上代码不支持四进ES5一个字节的UTF-16编码会被识别为两个字符,导致第二行为真,但是加上u修饰符后,ES6会被识别为一个字符,所以第一行是flase4。RegExp.prototype.unicode属性在正则实例对象中增加了一个新的unicode属性来判断是否设置了u修饰符,如下:constr1=/hello/;constr2=/hello/u;r1.unicode//false2.unicode//true5.y修饰修饰符和g修饰符类似,都是全局匹配,但是下一次匹配从上一次匹配成功的下一个位置开始。g只需要在剩余位置匹配,而y必须从第一个剩余位置开始。如下:vars='aaa_aa_a';varr1=/a+/g;varr2=/a+/y;r1.exec(s)//["aaa"]r2.exec(s)//["aaa"]r1.exec(s)//["aa"]r2.exec(s)//null//第一次执行后就是_aa_ag,只要剩余的位置存在,就可以匹配,返回aa//y是从最后一个结果后的第一个位置开始的,因为是_所以返回null。6.RegExp.prototype.sticky属性匹配y修饰符。ES6正则实例对象多了一个sticky属性,表示是否设置了y修饰符,如下:varr=/hello\d/y;r.sticky//true7.RegExp.prototype.flags属性ES6增加了一个flags属性到正则表达式,它将返回正则表达式的修饰符。//ES5的source属性//返回正则表达式的文本/abc/ig.source//"abc"//ES6的flags属性//返回正则表达式的修饰符/abc/ig.flags//'gi'8.s修饰符:dotAll模式匹配任意单个字符,用于匹配任意单个字符,如下:/foo.bar/s.test('foo\nbar')//true9.UnicodeattributeclassES2018引入了一类新的符号p{...}和P{...},它们允许正则表达式匹配所有符合Unicode特定属性的字符。constregexGreekSymbol=/\p{Script=Greek}/u;regexGreekSymbol.test('π')//true10。命名组匹配正常的多重匹配可以用括号括起来,如下:constRE_DATE=/(\d{4})-(\d{2})-(\d{2})/;constmatchObj=RE_DATE.exec('1999-12-31');constyear=matchObj[1];//1999const月=matchObj[2];//12constday=matchObj[3];//31但是上面的写法不好理解,比较难理解,只能用数字。另外,如果数组顺序发生变化,需要修改被引用的序号。于是就有了命名组匹配。允许为每组匹配指定一个名称,方便代码阅读和参考。即使分组的顺序发生变化,Ye也不必更改匹配后的处理代码。如下:constRE_DATE=/(?\d{4})-(?\d{2})-(?\d{2})/;constmatchObj=RE_DATE.exec('1999-12-31');constyear=matchObj.groups.year;//1999constmonth=matchObj.groups.month;//12constday=matchObj.groups.day;//31//格式:括号内的“命名组匹配”,在模式头部添加“问号+尖括号+组名”(?)11.String.prototype.matchAll如果是正则表达式一个字符串中有多个匹配项,现在使用g修饰符或y修饰符循环出去。现在有一个新的提议。就是用String.prototype.matchAll一次性取出来,但是返回的不是数组,而是遍历器。然后可以用for...of取出来。欢迎关注公众号【逍遥】ES6入门系列let和contES6入门变量解构与赋值ES6入门字符串扩展Git教程前端Git基础教程