Monday, 2 October 2017

regex - Why is a matched substring returning "undefined" in JavaScript?




I came across a strange behaviour when doing some regular expressions in JavaScript today (Firefox 3 on Windows Vista).



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



There's nothing wrong with the regular expression. As you can see, it has matched the correct part in the first console.log call.



Internet Explorer 7 and Chrome both behave as expected: format[1] returns "%A" (well, Internet Explorer 7 doing something right was a bit unexpected...)



Is this a bug in Firefox, or some "feature" I don't know about?


Answer



This is because console.log() works like printf(). The first argument to console.log() is actually a format string which may be followed with additional arguments. %A is a placeholder. For example:



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



See console.log() documentation for details. %A and any other undocumented placeholders seem to do the same as %o.


No comments:

Post a Comment

casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...