5

我今天在 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 中的错误,还是我不知道的某些“功能”?

4

2 回答 2

16

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

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

有关详细信息,请参阅console.log() 文档。%A 和任何其他未记录的占位符似乎与 %o 一样。

于 2009-01-11T12:55:28.507 回答
1

似乎%A以某种方式翻译成字符串undefined

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

于 2009-01-11T12:35:07.597 回答