javascript - RegExp.exec() 偶尔返回 NULL

标签 javascript regex

<分区>

我真的为此快要发疯了,我已经花了不成比例的时间来弄清楚这里发生了什么。所以请帮帮我 =)

我需要在 JavaScript 中对字符串进行一些 RegExp 匹配。不幸的是,它的行为非常奇怪。这段代码:

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>");
    }
}

返回前两个元素的“cat”和“dog”,这是应该的,但随后一些 exec() 调用开始返回 null。我不明白为什么。

我发布了一个 Fiddle here ,您可以在其中运行和编辑代码。

到目前为止,我已经在 Chrome 和 Firefox 中尝试过了。

最佳答案

哦,原来如此。因为您定义的是全局正则表达式,所以它首先匹配 cat,然后在循环的第二遍 dog 中匹配。所以,基本上你只需要重置你的正则表达式(它是内部指针)。比照。这个:

var w = new Array("I have a cat and a dog too.", "I have a cat and a dog too.", "I have a cat and a dog too.", "I have a cat and a dog too.");

for (var i in w) {
    var rx = /(cat|dog)/gi;
    var m = null;
    m = rx.exec(w[i]);
    if(m){
        document.writeln("<p>" + i + "<br/>INPUT: " + w[i] + "<br/>MATCHES: " + w[i].length + "</p>");
    }else{
        document.writeln("<p><b>" + i + "<br/>'" + w[i] + "' FAILED.</b><br/>" + w[i].length + "</p>");
    }
    document.writeln(m);
}

关于javascript - RegExp.exec() 偶尔返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4724701/

相关文章:

javascript - 检查 JavaScript 对象是否有值

Javascript将 "Mc"之后的下一个字符大写

javascript - 如何使用 JavaScript 制作 HTML 标记

javascript - $interval 发生太多次

python - 正则表达式从给定类型的字符串中获取多个日期

javascript - setTimeout范围问题

regex - 为什么这个正则表达式匹配第二项而不是第一项

正则表达式 - 返回引号之间的所有字符,每行多次

javascript - 正则表达式匹配模式 x 但返回任意字符串 y

python - 如何使用 Python RegEx 切换字符串中的两个元素?