2.1 KiB
2.1 KiB
title, localeTitle
| title | localeTitle |
|---|---|
| Reuse Patterns Using Capture Groups | Повторное использование шаблонов с использованием групп захвата |
Повторное использование шаблонов с помощью группы захвата
Подсказка 1:
Приведенный ниже код:
let testString = "test test test ";
let reRegex =/(test)\s\1/;
let result = reRegex.test(testString);
result будет соответствовать только test test потому что \1 в этом примере обозначает тот же текст, что и последний, сопоставленный первой группой захвата (test) .
Если бы мы должны были перевести регулярное выражение, это выглядело бы примерно так:
let re = /(test)\s\1;
let literalRe = /test\stest;
И rea и literalRe будут соответствовать одному и тому же.
Подсказка 2:
Учитывая приведенный ниже код:
let testString = "test test test ";
let reRegex =/(test)(\s)\1\2\1/;
let result = reRegex.test(testString);
будет соответствовать всем test test test потому что: \1 повтор (тест) \2 повторяет (\ s)
Подсказка 3:
Код ниже:
let testString = "test test test test test test";
let reRegex =/(test)(\s)\1\2\1/g;
let result = reRegex.test(testString);
потому что мы использовали \g , наше Regex не возвращается после первого полного соответствия ( test test test ) и соответствует всем повторениям.
Оповещение о спойлере - решение впереди!
Решение:
let repeatNum = "42 42 42";
let reRegex = /^(\d+)\s\1\s\1$/;
let result = reRegex.test(repeatNum);