Что означает g
флаг в регулярных выражениях?
В чем разница между /.+/g
и /.+/
?
javascript
regex
Intelis
источник
источник
var r = /a/g; console.log(r.test('a'), r.test('a')); // true false
Пример в Javascript для объяснения:
источник
g
это флаг глобального поиска.Флаг глобального поиска заставляет RegExp искать шаблон по всей строке, создавая массив всех вхождений, которые он может найти, соответствующих данному шаблону.
Таким образом, разница между
/.+/g
и/.+/
заключается в том, чтоg
версия будет находить каждое вхождение, а не только первое.источник
Там нет никакой разницы между
/.+/g
и/.+/
потому , что они оба будут только когда - либо совпадают всю строку сразу.g
Делает разницу , если регулярное выражение может соответствовать более чем один раз или содержит группы, в этом случае.match()
будет возвращать массив совпадений , а не массив групп.источник
Как отметила @matiska,
g
флаг также устанавливаетlastIndex
свойство.Очень важным побочным эффектом этого является то, что если вы повторно используете один и тот же экземпляр регулярного выражения для соответствующей строки, он в конечном итоге потерпит неудачу, потому что он начнет поиск только в
lastIndex
.источник
Помимо уже упомянутого значения
g
флага, он влияет наregexp.lastIndex
свойство:Ссылка: Сеть разработчиков Mozilla
источник
G в регулярных выражениях - это глобальный поиск, то есть поиск всех экземпляров по всем строкам.
источник
Приведу пример на основе строки. Если мы хотим удалить все вхождения из строки. Допустим, хотим ли мы удалить все вхождения "o" с "" из "hello world"
источник
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"]
.источник