RegExp.exec() renvoie la valeur NULL de façon sporadique

Je suis sérieux, fou au cours de cette année et j'ai déjà passé un unproportionate montant de temps à essayer de comprendre ce qui se passe ici. Merci donc de me donner un coup de main =)

J'ai besoin de faire quelques RegExp la correspondance de chaînes en JavaScript. Malheureusement, il se comporte très étrangement. Ce code:

var rx = /(cat|dog)/gi;
var w = new Array("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) {
    var m = null;
    m = rx.exec(w[i]);
    if(m){
        document.writeln("<pre>" + i + "\nINPUT: " + w[i] + "\nMATCHES: " + m.slice(1) + "</pre>");
    }else{
        document.writeln("<pre>" + i + "\n'" + w[i] + "' FAILED.</pre>");
    }
}

Renvoie "chat" et "chien" pour les deux premiers éléments, comme il se doit, mais certains exec()-les appels commencent à retourner null. Je ne comprends pas pourquoi.

J'ai posté un Violon ici, où vous pouvez l'exécuter et de modifier le code.

Et jusqu'à présent, j'ai essayé sur Chrome et Firefox.

Cheers!

/Christofer

  • il ne parvient pas uniquement sur un "I have a cat and a dog too.", il semble
  • exec retourne null si un match ne parvient pas, par conception, si pour une raison quelconque, il ne parvient pas à égaler.
InformationsquelleAutor cpak | 2011-01-18