Почему совпавшая подстрока возвращает "undefined" в JavaScript? - PullRequest
5 голосов
/ 11 января 2009

Сегодня я столкнулся со странным поведением при выполнении некоторых регулярных выражений в 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 или какая-то "особенность", о которой я не знаю?

Ответы [ 2 ]

16 голосов
/ 11 января 2009

Это потому, что console.log () работает как printf (). Первый аргумент console.log () - это строка формата, за которой могут следовать дополнительные аргументы. % A является заполнителем. Например:

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

Подробнее см. console.log () документация . % A и любые другие недокументированные заполнители, кажется, делают то же самое, что и% o.

1 голос
/ 11 января 2009

Похоже, %A как-то переводится в строку undefined.

Попробуйте убежать от части %A, думаю, это решит проблему.

...