String.match () имеет два режима работы
Строковый метод match()
можно использовать двумя способами, и важно понимать, что он возвращает. Если вы установите флаг 'g'
global , то метод возвращает массив всех совпадений в строке, и каждый элемент массива содержит одно полное совпадение регулярного выражения. Но если вы НЕ устанавливаете флаг 'g'
global , то метод ищет только первое совпадение в строке и возвращает массив, содержащий подробную информацию об этом совпадении. В этом случае первый элемент (matches[0]
) содержит общее совпадение, а последующие элементы содержат содержимое групп захвата в регулярном выражении (т.е. matches[1]
содержит содержимое группы захвата 1, matches[2]
содержит содержимое захвата группа 2 и т. д.).
Регулярное выражение в исходном сообщении: (/status-([a-z]+)/
) не имеет установленного глобального флага 'g'
, поэтому оно возвращает подробную информацию о первом совпадении. А поскольку существует одна группа захвата, возвращаемый массив имеет два элемента, первый элемент имеет полное совпадение, а второй - содержимое первой и единственной группы захвата.
Если вы добавите глобальный флаг, вы получите массив всех совпадений в строке:
str.match(/status-([a-z]+)/g);
Или (как отмечали другие авторы) вы можете удалить захватывающие скобки из регулярного выражения, и в этом случае вызов метода match()
вернет массив, содержащий только один элемент, который является общим совпадением:
str.match(/status-[a-z]+/);
String.match()
очень полезно, когда вы понимаете это поведение.