Пожалуйста, взгляните на следующий JavaScript. Я взял материал из этого, так что вы можете сосредоточиться на сути проблемы.Chrome V8 Bug? Функция, действующая по-разному после вызова 2-го раза
Вы заметите, что я дважды вызываю функцию prepPath в строке, проходящей в той же самой строке. В firefox и IE8 эта функция каждый раз предупреждает об истинности (как и ожидалось). Но, в Chromium 5.0.375.127 (55887) Ubuntu 10.04, функция возвращает true в первый раз, а false второй вызов, несмотря на то, что вход остается точно таким же!
<script type="text/javascript">
function prepPath(str)
{
var regX = /[^\s/"'\\].*[^\s/"'\\]/g;
if(regX.test(str))
{
alert("true: " + str);
}
else
{
alert("false; " + str);
}
}
prepPath("/desktop"); // alerts: true
prepPath("/desktop"); // alerts: false
</script>
Почему он возвращает ложь во второй раз в Chromium?
Единственный раз, когда вам нужен флаг «g» в регулярном выражении, это если вы хотите использовать одно и то же выражение более одного раза, а lastIndex помечено между использованием. Без флага «g» ваш код работает так, как вы ожидали. Если вы установите regX.lastIndex = 0 после определения его, он также вернет ожидаемое значение. – kennebec