为什么匹配的子字符串在JavaScript中返回“undefined”?

我今天在JavaScript中使用一些正则表达式时遇到了奇怪的行为(Windows Vista上的Firefox 3)。

var str = "format_%A";
var format = /(?:^|s)format_(.*?)(?:s|$)/.exec(str);

console.log(format);    // ["format_%A", "%A"]
console.log(format[0]); // "format_undefined"
console.log(format[1]); // Undefined

正则表达式没有任何问题。 正如你所看到的,它已经匹配了第一个console.log调用中的正确部分。

Internet Explorer 7和Chrome都按预期行事: format[1]返回“%A”(好吧,Internet Explorer 7正确地做某件事情有点意外......)

这是Firefox中的一个错误,还是一些我不知道的“特性”?


这是因为console.log()像printf()一样工作。 console.log()的第一个参数实际上是一个格式字符串,可以附加其他参数。 %A是一个占位符。 例如:

console.log("My name is %A", "John"); // My name is "John"

有关详细信息,请参阅console.log()文档。 %A和其他任何未公开的占位符似乎都与%o相同。


看起来像%A以某种方式翻译成undefined的字符串。

尝试转义%A部分,我认为这将解决问题。

链接地址: http://www.djcxy.com/p/13399.html

上一篇: Why is a matched substring returning "undefined" in JavaScript?

下一篇: Regular expression to search for Gadaffi