Zachytené skupiny v regulárnom výraze v JavaScripte
Obsah zachytených skupín je dostupný nielen v reťazci na nahradenie, ale aj v samotnom regulárnom výraze: môžeme niečo uložiť do skupiny a potom priamo v regulárnom výraze povedať, že tu musí byť obsah tejto skupiny.
Obsah zachytených skupín je dostupný podľa ich čísel,
pred ktorými je spätné lomítko. Napríklad,
prvá skupina bude dostupná takto: \1,
druhá skupina takto - \2, tretia
- \3 a tak ďalej.
Som si istý, že všetko, čo bolo napísané vyššie, je pre vás zatiaľ veľmi nejasné. To nie je prekvapujúce, pretože zachytené skupiny sú najmenej pochopiteľnou časťou regulárnych výrazov. Poďme si to vysvetliť na príkladoch.
Príklad
Predpokladajme, že máme takýto reťazec:
let str = 'aa bb cd ef';
Nájdime v ňom všetky miesta, kde sú dve rovnaké písmená za sebou. Na vyriešenie úlohy budeme hľadať ľubovoľné písmeno, uložíme ho do skupiny a potom skontrolujeme, či nasledujúcim symbolom je obsah tejto skupiny:
let res = str.replace(/([a-z])\1/g, '!');
Výsledkom zapísaným do premennej bude:
'! ! cd ef'
Príklad
Predpokladajme, že máme takýto reťazec:
let str = 'asxca buzxb csgd';
Nájdime v ňom všetky slová, v ktorých sú prvé a posledné písmená rovnaké. Na vyriešenie úlohy napíšeme nasledujúcu šablónu: písmeno, potom ešte jedno alebo viac písmen a potom také isté písmeno ako prvé:
let res = str.replace(/([a-z])[a-z]+\1/g, '!');
Výsledkom zapísaným do premennej bude:
'! ! csgd'
Praktické úlohy
Daný reťazec:
let str = 'aaa bbb ccc xyz';
Nájdite všetky podreťazce, v ktorých sú tri rovnaké písmená za sebou.
Daný reťazec:
let str = 'a aa aaa aaaa aaaaa';
Nájdite všetky podreťazce, v ktorých sú dve a viac rovnakých písmen za sebou.
Daný reťazec:
let str = 'aaa aaa bbb bbb ccc ddd';
Nájdite všetky podreťazce, v ktorých sú dve rovnaké slová za sebou.