@sprofxx

Почему RegExp.exec() срабатывает через раз в цикле?

Почему код:

var re = new RegExp(".*\\((.*)\\)","g");
var a = 'траляля (трулулу)';

for (var i=0; i<10;i++) {
    var txt = re.exec(a);
    if (txt === null) {
        var otv = 'null';
    } else {
        var otv = txt[1]; 
    }
    
    
    console.log(otv);
}


Выдает такой результат:

трулулу
null
трулулу
null
трулулу
null
трулулу
null
трулулу
null


Почему через раз нули?
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Хороший вопрос об одной тонкой (не очень) особенности JavaScript.

Результаты так чередуются потому, что объект регулярного выражения re с флагом g сохраняет состояние – свойство lastIndex – позицию, где последний раз был найден результат. И дальше ищет начиная с этого места.

Чтобы работало «нормально», можно сбрасывать это свойство перед очередным поиском:
for (var i=0; i<10;i++) {
+    re.lastIndex = 0; // каждый раз начинать искать с 0
    var txt = re.exec(a);

Подробнее: https://learn.javascript.ru/regexp-methods#regexp-...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы