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:
javascriptlet 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:
javascriptlet res = str.replace(/([a-z])\1/g, '!');
Výsledkom zapísaným do premennej bude:
javascript'! ! cd ef'
Príklad
Predpokladajme, že máme takýto reťazec:
javascriptlet 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é:
javascriptlet res = str.replace(/([a-z])[a-z]+\1/g, '!');
Výsledkom zapísaným do premennej bude:
javascript'! ! csgd'
Praktické úlohy
Daný reťazec:
javascriptlet str = 'aaa bbb ccc xyz';
Nájdite všetky podreťazce, v ktorých sú tri rovnaké písmená za sebou.
Daný reťazec:
javascriptlet 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:
javascriptlet str = 'aaa aaa bbb bbb ccc ddd';
Nájdite všetky podreťazce, v ktorých sú dve rovnaké slová za sebou.