Что означает флаг 'g' в регулярных выражениях?

В чем смыслg флаг в регулярных выражениях?

В чем разница между/.+/g а также ?/.+/

Ответы на вопрос(8)

g флаг, это влияетregexp.lastIndex имущество:

LastIndex - это целочисленное свойство чтения / записи экземпляров регулярного выражения, которое указывает индекс, с которого начинается следующее совпадение. (...) Это свойство устанавливается, только если экземпляр регулярного выражения использовал "g" флаг для обозначения глобального поиска.

Ссылка:Сеть разработчиков Mozilla

Пример в Javascript, чтобы объяснить:

> 'aaa'.match(/a/g)
[ 'a', 'a', 'a' ]

> 'aaa'.match(/a/)
[ 'a', index: 0, input: 'aaa' ]

з строки. Скажем, если мы хотим удалить все вхождения «о» с "" от "Привет, мир"

"hello world".replace(/o/g,'');

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 для глобального поиска. Имея это в видуЯ сопоставлю все вхождения. Вы'Я также обычно вижуi что означает игнорировать регистр.

Ссылка:глобальный - JavaScript | MDN

«Г» Флаг указывает, что регулярное выражение должно быть проверено на все возможные совпадения в строке.

Безg флаг этоЯ проверю только для первого.

 Ignacio23 янв. 2019 г., 21:43
 xr280xr26 авг. 2017 г., 00:04
Таким образом, флаг / g не имеет значения при использовании функции .test, потому что он все равно находит только первое совпадение, верно?
 Janosch07 окт. 2018 г., 20:38
@ xr280xr Не имеет значения, больше похоже на контрпродуктивность. Это сломает вещи, если вы снова используете RegExp. [var r = /a/g; console.log(r.test('a'), r.test('a')); // true false

g это глобальный флаг поиска.

Глобальный флаг поиска заставляет RegExp искать шаблон по всей строке, создавая массив всех вхождений, которые он может найти, соответствующих данному шаблону.

Так что разница между/.+/g а также/.+/ это то, чтоg Версия найдет каждое вхождение, а не только первое.

/.+/g а также/.+/ потому что они оба будут когда-либо соответствовать целой строке только один раз.g имеет значение, если регулярное выражение может совпадать более одного раза или содержит группы, в этом случае.match() вернет массив совпадений вместо массива групп.

означающий, что он будет искать все экземпляры во всех строках.

Ваш ответ на вопрос