@RIBAdminio
немного Системный, немного программист.

Почему одно регулярное выражение для одной и той же строки выдаёт разные результаты?

Столкнулся с очень странным поведением регулярного выражения. Дело в том, что приведённый ниже код должен выдавать count = 2, но по какой-то причине результатом является count = 1.

let count = 0;
const regExFilesExtension = /\.mp3/gi;
const str = "segment(0-2-10__0-2-18).mp3";
arr = [str, str];
arr.forEach((f) => {
  const bol = regExFilesExtension.test(f);
  console.log(f, bol);
  if (bol) {
    count++;
  }
});
console.log(`count = ${count}`);

Вы можете самостоятельно в этом убедиться, вот пример на codepen.

Проверял регулярное выражение - вроде корректно, спрашивал искусственный интеллект - он тоже не знает в чём дело. Поиск результатов не дал.
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
JavaScript RegExp objects are stateful when they have the global or sticky flags set (e.g., /foo/g or /foo/y). They store a lastIndex from the previous match. Using this internally, test() can be used to iterate over multiple matches in a string of text (with capture groups).
Кратко - с опциями g и y объект RegExp сохраняет позицию, с которой продолжает поиск при следующем вызове. У вас одинаковые строки и второй вызов начинает с позиции, на которой закончился первый вызов, то есть уже после '.mp3'.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы