js使用filter和正则表达式过滤数组和预期的不一样

blu10ph 发布于 2017/03/25 10:08
阅读 792
收藏 0

请教个js和正则的问题:

    var arr = ["baa","aab","aba"];
    var reg = /aa/g;
    function a(val){
        return reg.test(val);
    }
    var ar = arr.filter(a);
    console.log(ar);
只匹配了baa就结束了

如果去掉正则参数g,能匹配baa和aab

如果数组改成

    var arr = ["baa","aba","aab"];

不去掉g也能匹配出两个

为什么参数g会对filter产生影响?求大神解惑~

加载中
0
s
skbysp

看一下reg的lastIndex,`g` flag会影响lastIndex,匹配不到的话会重置lastIndex,这个场景肯定不能用`g`flag

jing_rhrh
jing_rhrh
不错,有用
blu10ph
blu10ph
了解了.第一个成功后lastIndex变成3,第二个从3开始会失败,lastIndex变成0,所以会导致第二个总是失败,第三个是准确的.g确实不适用这个场景.谢谢大神!~
返回顶部
顶部