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

ES9(4)——RegExp-dotAll...

时间:2023-04-02 17:05:40 HTML

RegExpRegExp在ES9中添加dotAll(点匹配)判断是否启用dotAllnamedcapturedgroups(命名组捕获)ES5ES9loodbehindassert(后置断言)先断言再断言ES6-ES10学习布局RegExp在ES9中添加dotAll命名组捕获下面一行asserts正则模式中的dotAll(点匹配)点是dotAll,可以匹配任意字符,但是很多字符不能匹配。例如:四字节UTF-16字符换行符\\n\\r换行回车console.log(/foo.bar/.test('foo\nbar'))//falseconsole.log(/foo.bar/.test('fooabar'))//true加上s可以匹配换行符console.log(/foo.bar/s.test('foo\nbar'))//true加上s可以匹配换行符,plusu可以匹配4位UTF-16字符,点号功能无所不能。console.log(/foo.bar/us.test('foo\nbar'))判断dotAll是否启用,使用flags属性判断,如果不启用则为falseconstr=/foo.bar/console.log(r.dotAll)//falseconsole.log(r.flags)//emptyconstre=/foo.bar/sconsole.log(re.dotAll)//trueconsole.log(re.flags)//snamed捕获组(namedgroupcapture)groupcapture之前,但是namedgroupcapture只有ES5如何获取字符串中匹配的年月日?//先看match匹配到的值?console.log("2019-06-07".match(/(\d{4})-(\d{2})-(\d{2})/))//["2019-06-07","2019-06-07","2019","06","07",index:0,input:"2019-06-07",groups:undefined]//完全匹配//第一个括号组//第二个括号组//第三个括号组//index要匹配的字符数//输入完整的输入字符串//分组目前是空的,一会儿就知道用法了constt="2019-06-07".match(/(\d{4})-(\d{2})-(\d{2})/)console.log(t[1])//2019console.log(t[2])//06console.log(t[3])//07上面的方法,如果数据复杂的不好写,而且数组的个数是多少,所以最好加个名字ES9//括号里写?constT="2019-06-07".match(/(?<年>\d{4})-(?<月>\d{2})-(?<日>\d{2})/)console.log(T)//["2019-06-07","2019","06","07",index:0,input:"2019-06-07",//groups:{day:"07",month:"06",year:"2019"}]//此时groups中就有了value,可以使用namedkey获取console.log(T.groups.year)//2019console.log(T.groups.month)//06console.log(T.groups.day)//07loodbehindassert(后置断言)有lookaheadassertion,ES9只是有一个lookbehindassertionlookbehindassertjs一直是lookaheadassertionlettest='helloworld'console.log(test.match(/hello(?=\sworld)/))//后面的括号不是组匹配,是预评估//先满足一个条件再做断言,但是我要知道world之前是hello,即完成后评估ES9能力在hello前面加上一个空格console.log(test.match(/(?