Ответы:
g
для глобального поиска. Это означает, что он будет соответствовать всем вхождениям. Обычно вы также видите, i
что означает игнорировать регистр.
Ссылка: global - JavaScript | MDN
Флаг «g» указывает, что регулярное выражение должно быть проверено на соответствие всем возможным совпадениям в строке.
Без g
флага он будет проверять только первое.
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
g
это флаг глобального поиска.
Флаг глобального поиска заставляет RegExp искать шаблон по всей строке, создавая массив всех вхождений, которые он может найти, соответствующих данному шаблону.
Таким образом, разница между /.+/g
и /.+/
заключается в том, что g
версия будет находить каждое вхождение, а не только первое.
Там нет никакой разницы между /.+/g
и /.+/
потому , что они оба будут только когда - либо совпадают всю строку сразу. g
Делает разницу , если регулярное выражение может соответствовать более чем один раз или содержит группы, в этом случае .match()
будет возвращать массив совпадений , а не массив групп.
Как отметила @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 в регулярных выражениях - это глобальный поиск, то есть поиск всех экземпляров по всем строкам.
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"]
.