50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > 正则表达式-y修饰符

正则表达式-y修饰符

时间:2019-05-16 15:05:24

相关推荐

正则表达式-y修饰符

y修饰符

y修饰符和g修饰符是类似的,都是全局匹配,但y修饰符有一定的匹配要求

g修饰符

只要剩余的字符中存在匹配即可

y修饰符

必须从剩余字符的第一个位置开始匹配,否则退出匹配

示例讲解

let str = "aaa_aa_aaaa"let reg_g = /a+/glet reg_y = /a+/yreg_g.exec(str)// aaareg_y.exec(str)// aaareg_g.exec(str)// aareg_y.exec(str)// null

从上面的示例我们可以知道:

第第一次 reg_y.exec 的时候,匹配的是“aaa_aa_aaaa”字符,从第一个位置开始匹配并且匹配成功:aaa第二次 reg_y.exec 的时候,匹配的是“_aa_aaaa”字符,从第一个位置 “_” 开始匹配,但匹配不成功,因此退出匹配

示例2

let str = "_aaa_aa_aaaa"let reg_g = /a+/glet reg_y = /a+/yreg_g.exec(str)// aaareg_y.exec(str)// null// reg_y = /_a+/y// reg_y.exec(str) -> _aaa// reg_y.exec(str) -> _aa// reg_y.exec(str) -> _aaaa// reg_y.exec(str) -> null

同样的,第一次 reg_y.exec 的时候,匹配的是“_aaa_aa_aaaa”字符,从第一个位置"_"开始匹配,匹配不成功,因此退出匹配。若希望匹配成功可以将 reg_y = /_a+/y,即可匹配成功

lastIndex

上面我们说了:y修饰符必须从剩余字符的第一个位置开始匹配,否则退出匹配。

那么什么是第一个位置,实际就是 lastIndex 属性,lastIndex属性是正则变量的属性,他规定了匹配的时候的开始位置,通过自定义lastIndex的值可以修改匹配的开始位置

let reg = /a+/yreg.lastIndex// 0reg.lastIndex = 4reg.lastIndex// 4// exec也是通过修改lastIndex来修改匹配的起始位置

lastIndex与y修饰符

通过合理修改lastIndex的值可以在一定情况下是y修饰符不符合常规的匹配成功,同样是上面的例子,在不修改正则表达式的情况下,我们通过lastIndex来使其匹配成功

let str = "_aaa_aa_aaaa"let reg_y = /a+/yreg_y.lastIndex = 1reg_y.exec(str)// aaareg_y.lastIndex = 5reg_y.exec(str)// aareg_y.lastIndex = 8reg_y.exec(str)// aaaaa

总结

y修饰符可以进行全局匹配,且必须从当前匹配的起始位置开始匹配且匹配成功,否则退出匹配

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。