Відповіді:
gпризначений для глобального пошуку. Це означає, що він відповідатиме всім явищам. Зазвичай ви також побачите, iщо означає ігнорувати випадок.
Довідка: глобальна - JavaScript | MDN
Прапор "g" вказує на те, що регулярний вираз слід перевірити на всі можливі відповідники в рядку.
Без gпрапора це буде лише тест на перший.
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
g - прапор глобального пошуку.
Глобальний прапор пошуку змушує RegExp шукати шаблон у всій рядку, створюючи масив усіх подій, які він може знайти відповідно до заданого шаблону.
Тож різниця між /.+/gі /.+/ полягає в тому, що gверсія знайде кожне явище замість лише першого.
Як зазначив @matiska, gпрапор також встановлює lastIndexмайно.
Дуже важливим побічним ефектом цього є те, що якщо ви повторно використовуєте один і той же екземпляр регулярного виразу для відповідного рядка, він з часом вийде з ладу, оскільки він тільки починає пошук у lastIndex.
// regular regex
const regex = /foo/;
// same regex with global flag
const regexG = /foo/g;
const str = " foo foo foo ";
const test = (r) => console.log(
r,
r.lastIndex,
r.test(str),
r.lastIndex
);
// Test the normal one 4 times (success)
test(regex);
test(regex);
test(regex);
test(regex);
// Test the global one 4 times
// (3 passes and a fail)
test(regexG);
test(regexG);
test(regexG);
test(regexG);
Окрім вже згаданого значення gпрапора, він впливає на regexp.lastIndexвластивість:
LastIndex - це властивість читання / запису цілих чисел екземплярів регулярного вираження, яка вказує індекс, з якого слід починати наступний збіг. (...) Це властивість встановлюється лише в тому випадку, якщо екземпляр регулярного вираження використовував прапор "g" для позначення глобального пошуку.
Довідково: Мережа розробників Mozilla
g -> повертає всі збігиwithout g -> повертає першу відповідністьприклад:
'1 2 1 5 6 7'.match(/\d+/)повертає ["1", index: 0, input: "1 2 1 5 6 7", groups: undefined]. Як бачите, ми можемо взяти лише перший матч "1".'1 2 1 5 6 7'.match(/\d+/g)повертає масив усіх збігів ["1", "2", "1", "5", "6", "7"].