Files
freeCodeCamp/curriculum/challenges/ukrainian/02-javascript-algorithms-and-data-structures/regular-expressions/reuse-patterns-using-capture-groups.md
2023-08-14 21:37:40 +05:30

4.7 KiB
Raw Blame History

id, title, challengeType, forumTopicId, dashedName
id title challengeType forumTopicId dashedName
587d7dbb367417b2b2512baa Повторне використання шаблонів за допомогою груп захоплення 1 301364 reuse-patterns-using-capture-groups

--description--

Припустимо, ви хочете знайти збіг для слова, яке зустрічається декілька разів, як у прикладі нижче.

let repeatStr = "row row row your boat";

Можна використати /row row row/, але що робити, якщо ви не знаєте, яке слово повторюється? Для пошуку повторюваних підрядків можна використовувати групи захоплення.

Щоб створити групу захоплення, оточіть шаблон регулярного виразу дужками. У цьому випадку метою є захопити слово, яке складається з алфавітно-цифрових символів, тому групою захоплення буде \w+, оточена дужками: /(\w+)/.

Підрядок, який збігається з групою, зберігається у тимчасовій «змінній», доступ до якої можна отримати у межах того самого регулярного виразу за допомогою зворотнього слешу і номера групи захоплення (наприклад, \1). Групи захоплення автоматично нумеруються за порядком відкриваючої дужки (зліва направо), починаючи з 1.

Приклад нижче збігається зі словом, яке зустрічається три рази підряд та розділене пробілом:

let repeatRegex = /(\w+) \1 \1/;
repeatRegex.test(repeatStr); // Returns true
repeatStr.match(repeatRegex); // Returns ["row row row", "row"]

Використовуючи метод .match() в рядку, можна повернути масив з відповідним підрядком, а також із захопленими групами.

--instructions--

Використайте групи захоплення в reRegex, щоб збігтись з рядком, який складається з однакового числа, що повторюється тричі та розділене пробілами.

--hints--

Ваш регулярний вираз має використати скорочений символьний клас для цифр.

assert(reRegex.source.match(/\\d/));

Ваш регулярний вираз має повторно використати групу захоплення двічі.

assert(reRegex.source.match(/\\1|\\2/g).length >= 2);

Ваш регулярний вираз повинен збігатися з рядком 42 42 42.

reRegex.lastIndex = 0;
assert(reRegex.test('42 42 42'));

Ваш регулярний вираз повинен збігатися з рядком 100 100 100.

reRegex.lastIndex = 0;
assert(reRegex.test('100 100 100'));

Ваш регулярний вираз не повинен збігатися з рядком 42 42 42 42.

assert.equal('42 42 42 42'.match(reRegex.source), null);

Ваш регулярний вираз не повинен збігатися з рядком 42 42.

assert.equal('42 42'.match(reRegex.source), null);

Ваш регулярний вираз не повинен збігатися з рядком 101 102 103.

reRegex.lastIndex = 0;
assert(!reRegex.test('101 102 103'));

Ваш регулярний вираз не повинен збігатися з рядком 1 2 3.

reRegex.lastIndex = 0;
assert(!reRegex.test('1 2 3'));

Ваш регулярний вираз повинен збігатися з рядком 10 10 10.

reRegex.lastIndex = 0;
assert(reRegex.test('10 10 10'));

Ваш регулярний вираз не повинен збігатися з рядком 42\t42\t42.

reRegex.lastIndex = 0;
assert(!reRegex.test('42\t42\t42'));

Ваш регулярний вираз не повинен збігатися з рядком 42 42 42.

reRegex.lastIndex = 0;
assert(!reRegex.test('42  42  42'));

--seed--

--seed-contents--

let repeatNum = "42 42 42";
let reRegex = /change/; // Change this line
let result = reRegex.test(repeatNum);

--solutions--

let repeatNum = "42 42 42";
let reRegex = /^(\d+) \1 \1$/;
let result = reRegex.test(repeatNum);