Накратко
Изразите с g или y пазят позиция на последното съвпадение.
Полезно е да знаеш
test() връща true или false за съвпадение на регулярен израз. При флагове g и y обектът е със състояние и използва lastIndex. Например const r = /a/g; r.test("a"); r.test("a"); дава последователно true и false. [1]
За независима булева проверка често не ти е нужен g. Ако го използваш съзнателно за обхождане, управлявай позицията. Не обяснявай променящия се резултат като случайна грешка на JavaScript: същият RegExp обект продължава от запазеното място, докато задачата може да очаква ново търсене.
Източници
За повече подробности и проверка на информацията: