⊗jsSpREEP 129 of 294 menu

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:

let 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:

let res = str.replace(/([a-z])\1/g, '!');

Výsledek zapsaný do proměnné bude následující:

'! ! cd ef'

Příklad

Předpokládejme, že máme takový řetězec:

let 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í:

let res = str.replace(/([a-z])[a-z]+\1/g, '!');

Výsledek zapsaný do proměnné bude následující:

'! ! csgd'

Praktické úlohy

Je dán řetězec:

let 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:

let 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:

let str = 'aaa aaa bbb bbb ccc ddd';

Najděte všechny podřetězce, ve kterých jsou dvě stejná slova za sebou.

uzluzcsenhi