【发布时间】:2011-06-11 02:46:23
【问题描述】:
我真的为此发疯了,而且我已经花费了不成比例的时间来试图弄清楚这里发生了什么。所以请帮我一把=)
我需要对 JavaScript 中的字符串进行一些正则表达式匹配。不幸的是,它的行为非常奇怪。这段代码:
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 中尝试过。
【问题讨论】:
-
它似乎只在
"I have a cat and a dog too."上失败,似乎 -
exec 如果匹配失败,则返回 null,因此由于某种原因它无法匹配。
标签: javascript regex