Почему совпадающая подстрока возвращает "undefined" в JavaScript?
Я столкнулся со странным поведением при выполнении некоторых регулярных выражений в JavaScript сегодня (Firefox 3 на 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
В регулярном выражении нет ничего плохого. Как вы можете видеть, он совпал с правильной частью в первом вызове console.log
.
Internet Explorer 7 и Chrome ведут себя так, как ожидалось: format[1]
возвращает "%A" (ну, Internet Explorer 7 делает что-то правильно было немного неожиданно...)
Это ошибка в Firefox, или какая-то" особенность " I не знаете о чем?
2 ответа:
Это потому, что консоль.log() работает как printf (). Первый аргумент для утешения.log () - это фактически строка формата, за которой могут следовать дополнительные аргументы. %A-это заполнитель. Например:
console.log("My name is %A", "John"); // My name is "John"
См. консоль.log () documentation для получения подробной информации. %A и любые другие недокументированные заполнители, по-видимому, делают то же самое, что и %o.