Я написал тест Javascript RegExp для определения формата строки даты, по ошибке добавил избыточный флаг "g" и нашел что-то интересное.
var s = "2009/03/10";
var regex=/^\d{4}[/]\d{2}[/]\d{2}$/g;
alert(regex.test(s));
alert(regex.test(s));
alert(regex.test(s));
alert(regex.test(s));
Я получил "true", за которым следует "false", затем еще одно "true", затем еще одно "false".
Если я использую цикл для его выполнения, я найду что-то более интересное, я получу четыре "true" в IE и Safari и true, false, true, false в FF, Chrome.
for (var i=0; i<4; i++)
{
var s = "2009/03/10";
var regex=/^\d{4}[/]\d{2}[/]\d{2}$/g;
alert(regex.test(s));
}
У кого-нибудь есть идея объяснить, почему регулярное выражение Javascript ведет себя так и почему браузеры возвращают разные результаты? (связано с объявлением переменной и областью действия?)