Почему метод JavaScript RegExp.test() работает как переключатель?
Может кто-нибудь объяснить, почему стрелка alert()
в следующем JavaScript-коде? Кажется, это ошибка в методе RegExp.test()
, которая отменяет свое предыдущее решение каждый раз, когда вы запускаете метод. Я использую IE7.
Я нашел замену, которая кажется твердой, вместо этого используется метод string.search(regex)
. Но мне любопытно, знает ли кто-нибудь об этом.
var styleHasWidthRegex = /\bwidth\s*\:/ig;
var styleText = "WIDTH: 350px";
var result1 = styleHasWidthRegex.test(styleText);
var result2 = !styleHasWidthRegex.test(styleText);
if (result1 == result2) {
alert("This should never happen!");
}
Ответы
Ответ 1
В вашем регулярном выражении установлен глобальный флаг (g
). Каждый раз, когда он выполняется, он обновляет внутренний индекс (свойство lastIndex), указывающее, где оно остановилось, и начните поиск в это точка в следующий раз.
Конечно, вы этого действительно не хотите - вы хотите, чтобы он начинался с самого начала каждый раз. Поэтому поставьте флаг g
.
Ответ 2
В этом случае вам всегда нужен глобальный тег, так как в объявлениях css свойство должно быть объявлено только один раз.