RegExp.exec() returns NULL sporadically

后端 未结 4 867
故里飘歌
故里飘歌 2020-12-04 13:58

I am seriously going crazy over this and I\'ve already spent an unproportionate amount of time on trying to figure out what\'s going on here. So please give me a hand =)

4条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-04 14:50

    Two things:

    1. The mentioned need of reset when using the g (global) flag. To solve this I recommed simply assign 0 to the lastIndex member of the RegExp object. This have better performance than destroy-and-recreate.
    2. Be careful when use in keyword in order to walk an Array object, because can lead to unexpected results with some libs. Sometimes you should check with somethign like isNaN(i), or if you know it don't have holes, use the classic for loop.

    The code can be:

    var rx = /(cat|dog)/gi;
    w = ["I have a cat and a dog too.", "There once was a dog and a cat.", "I have a cat and a dog too.", "There once was a dog and a cat.","I have a cat and a dog too.", "There once was a dog and a cat.","I have a cat and a dog too.", "There once was a dog and a cat.","I have a cat and a dog too.", "There once was a dog and a cat.","I have a cat and a dog too.", "There once was a dog and a cat.","I have a cat and a dog too.", "There once was a dog and a cat."];
    
    for (var i in w)
     if(!isNaN(i))        // Optional, check it is an element if Array could have some odd members.
      {
       var m = null;
       m = rx.exec(w[i]); // Run
       rx.lastIndex = 0;  // Reset
       if(m)
        {
         document.writeln("
    " + i + "\nINPUT: " + w[i] + "\nMATCHES: " + m.slice(1) + "
    "); } else { document.writeln("
    " + i + "\n'" + w[i] + "' FAILED.
    "); } }

提交回复
热议问题