正则表达式-y修饰符

y修饰符

y修饰符和g修饰符是类似的,都是全局匹配,但y修饰符有一定的匹配要求
g修饰符
只要剩余的字符中存在匹配即可

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

示例讲解

let str = "aaa_aa_aaaa"
let reg_g = /a+/g
let reg_y = /a+/y

reg_g.exec(str)
// aaa
reg_y.exec(str)
// aaa

reg_g.exec(str)
// aa
reg_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+/g
let reg_y = /a+/y

reg_g.exec(str)
// aaa
reg_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+/y
reg.lastIndex
// 0
reg.lastIndex = 4
reg.lastIndex
// 4
// exec也是通过修改lastIndex来修改匹配的起始位置

lastIndex与y修饰符

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

let str = "_aaa_aa_aaaa"
let reg_y = /a+/y
reg_y.lastIndex = 1
reg_y.exec(str)
// aaa
reg_y.lastIndex = 5
reg_y.exec(str)
// aa
reg_y.lastIndex = 8
reg_y.exec(str)
// aaaaa

总结

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

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值