【问题】匹配后缀名正则失效,只有个别匹配成功
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 要注意咯