【踩坑记】正则全局检索失效 - lastIndex在搞事

【问题】匹配后缀名正则失效,只有个别匹配成功

let regexp = /\.(jpg|JPG)/g;
let data = [
    "aaaaaaaaa.jpg",
    "bbbbbb.jpg",
    "ccccc.jpg",
    "ddddddd.jpg"
];
let arr=[];

function fun(){
  arr2 = data.filter(i=>{
    console.log('匹配前',regexp.lastIndex);
    let match = regexp.test(i);
    console.log('匹配后',regexp.lastIndex);
    return match;
  })
    console.log(arr2)
}
fun()

在这里插入图片描述
【原因】原来是 正则 的 laseIndex 属性 在搞事情

lastIndex
只有正则表达式使用了表示全局检索的 “g” 或者粘性检索的 “y” 标志时,该属性才会起作用。此时应用下面的规则:
如果 lastIndex 大于字符串的长度,则 regexp.test 和 regexp.exec 将会匹配失败,然后 lastIndex 被设置为 0。
如果 lastIndex 等于或小于字符串的长度,则该正则表达式匹配从 lastIndex 位置开始的字符串。
如果 regexp.test 和 regexp.exec 匹配成功,lastIndex 会被设置为紧随最近一次成功匹配的下一个位置。
如果 regexp.test 和 regexp.exec 匹配失败,lastIndex 会被设置为 0

【解决】修改正则为 /\.(jpg|JPG)$/,以后用到全局搜索g 要注意咯

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值