为什么匹配的子字符串在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
部分,我认为这将解决问题。
上一篇: Why is a matched substring returning "undefined" in JavaScript?