Zachycené skupiny v regulárním výrazu v JavaScriptu
Obsah zachycených skupin je dostupný nejen v řetězci pro nahrazení, ale i v samotném regulárním výrazu: můžeme něco uložit do skupiny a potom přímo v regulárním výrazu říct, že zde musí být obsah této skupiny.
Obsah zachycených skupin je dostupný podle jejich čísel,
před kterými je zpětné lomítko. Například,
první skupina bude dostupná takto: \1,
druhá skupina takto - \2, třetí
- \3 a tak dále.
Jsem si jistý, že vše výše napsané je pro vás zatím velmi nejasné. To není překvapivé, protože zachycené skupiny jsou nejméně srozumitelným místem regulárních výrazů. Pojďme si to vysvětlit na příkladech.
Příklad
Předpokládejme, že máme takový řetězec:
javascriptlet str = 'aa bb cd ef';
Pojďme v něm najít všechna místa, ve kterých jsou dvě stejné písmena za sebou. K řešení úlohy budeme hledat libovolné písmeno, uložit jej do skupiny a poté zkontrolovat, zda dalším symbolem je obsah této skupiny:
javascriptlet res = str.replace(/([a-z])\1/g, '!');
Výsledek zapsaný do proměnné bude následující:
javascript'! ! cd ef'
Příklad
Předpokládejme, že máme takový řetězec:
javascriptlet str = 'asxca buzxb csgd';
Pojďme v něm najít všechna slova, ve kterých jsou první a poslední písmeno stejné. K řešení úlohy napíšeme následující vzor: písmeno, potom jedno nebo více písmen a poté stejné písmeno jako první:
javascriptlet res = str.replace(/([a-z])[a-z]+\1/g, '!');
Výsledek zapsaný do proměnné bude následující:
javascript'! ! csgd'
Praktické úlohy
Je dán řetězec:
javascriptlet str = 'aaa bbb ccc xyz';
Najděte všechny podřetězce, ve kterých jsou tři stejná písmena za sebou.
Je dán řetězec:
javascriptlet str = 'a aa aaa aaaa aaaaa';
Najděte všechny podřetězce, ve kterých jsou dvě a více stejných písmen za sebou.
Je dán řetězec:
javascriptlet str = 'aaa aaa bbb bbb ccc ddd';
Najděte všechny podřetězce, ve kterých jsou dvě stejná slova za sebou.