freeCodeCamp/guide/russian/certifications/javascript-algorithms-and-d.../regular-expressions/reuse-patterns-using-captur.../index.md

2.1 KiB
Raw Blame History

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);