Карманы в методе match в регулярках JavaScript

Если вызвать метод match без модификатора g, то он найдет только первое совпадение с регуляркой. Однако, вернет он все равно массив - это будет массив, состоящий из найденного совпадения, с дополнительными свойствами: index - позиция, на которой оно обнаружено и input - строка, в которой был поиск. А найденная подстрока будет лежать в нулевом элементе возвращенного массива (почему так - поймете дальше).

Смотрите пример:

let str = 'zzz xaaax xaaaax xaaaaax'; let res = str.match(/xa+x/); console.log(res[0]); // выведет 'xaaax' - найденное console.log(res.index); // выведет 4 - позиция начала найденного

Карманы для метода match

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

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

В следующем примере мы ищем строки по шаблону буквы 'x', а между ними - от одной и более букв 'a'. При этом найденные буквы 'a' попадут в карман:

let str = 'sss xaaax zzz'; let res = str.match(/x(a+)x/); console.log(res[0]); // выведет 'xaaax' - найденное console.log(res[1]); // выведет 'aaa' - карман

Можно использовать не один карман, а несколько. В этом случае первые скобки будут первым карманом, вторые - вторым и так далее. Смотрите пример:

let str = 'sss xaaa-bbbx zzz'; let res = str.match(/x(a+)-(b+)x/); console.log(res[0]); // выведет 'xaaax' - найденное console.log(res[1]); // выведет 'aaa' - 1 карман console.log(res[2]); // выведет 'bbb' - 2 карман

Практические задачи

Дана строка, содержащая домен:

let str = 'sss domain.ru zzz';

Найдите этот домен и положите его имя в первый карман, а зону - во второй.

Дана строка, содержащая дату:

let str = '31.12.2025';

Положите день в первый карман, месяц - во второй, а год - в третий.