# Карманы в самой регулярке в JavaScript

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

Содержимое карманов доступно по их номерам, перед которыми стоит обратный слеш. Например, первый карман будет доступен вот так: `\1`, второй карман вот так - `\2`, третий - `\3` и так далее.

Уверен, что все написанное выше пока весьма туманно для вас. Это не удивительно, так как карманы - самое малопонятное место регулярок. Давайте будем разбираться на примерах.

## Пример

Пусть у нас есть вот такая строка:

`let str = 'aa bb cd ef';`

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

`let res = str.replace(/([a-z])\1/g, '!');`

В результате в переменную запишется следующее:

`'! ! cd ef'`

## Пример

Пусть у нас есть вот такая строка:

`let str = 'asxca buzxb csgd';`

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

`let res = str.replace(/([a-z])[a-z]+\1/g, '!');`

В результате в переменную запишется следующее:

`'! ! csgd'`

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

Дана строка:

`let str = 'aaa bbb ccc xyz';`

Найдите все подстроки, в которых есть три одинаковые буквы подряд.

Дана строка:

`let str = 'a aa aaa aaaa aaaaa';`

Найдите все подстроки, в которых есть две и более одинаковые буквы подряд.

Дана строка:

`let str = 'aaa aaa bbb bbb ccc ddd';`

Найдите все подстроки, в которых есть два одинаковых слова подряд.

← →
↑
en ru