Žepi v samem regularnem izrazu v JavaScript
Vsebina žepov ni na voljo le v nadomestnem nizu, temveč tudi v samem regularnem izrazu: mi lahko nekaj damo v žep, nato pa kar v regularnem izrazu rečemo, da naj tukaj stoji vsebina tega žepa.
Vsebina žepov je na voljo po njihovih številkah,
pred katerimi je poševnica nazaj. Na primer,
prvi žep bo na voljo takole: \1,
drugi žep takole - \2, tretji
- \3 in tako naprej.
Prepričan sem, da je vse zgoraj napisano za vas za zdaj še precej nejasno. To ni presenetljivo, saj so žepi - najbolj nerazumljivo mesto regularnih izrazov. Razumejmo s primeri.
Primer
Recimo, da imamo takšen niz:
let str = 'aa bb cd ef';
Poiščimo v njem vsa mesta, kjer stoji dve kateri koli enaki črki zapored. Za rešitev problema bomo iskali katero koli črko, jo dali v žep, nato pa preverili, ali gre za naslednjim simbolom vsebina tega žepa:
let res = str.replace(/([a-z])\1/g, '!');
Kot rezultat se bo v spremenljivko zapisalo naslednje:
'! ! cd ef'
Primer
Recimo, da imamo takšen niz:
let str = 'asxca buzxb csgd';
Poiščimo v njem vse besede, v katerih sta enaki prva in zadnja črka. Za rešitev problema napišimo naslednji vzorec: črka, nato še ena ali več črk, nato pa enaka črka kot prva:
let res = str.replace(/([a-z])[a-z]+\1/g, '!');
Kot rezultat se bo v spremenljivko zapisalo naslednje:
'! ! csgd'
Praktične naloge
Dan niz:
let str = 'aaa bbb ccc xyz';
Poiščite vse podnize, v katerih so tri enake črke zapored.
Dan niz:
let str = 'a aa aaa aaaa aaaaa';
Poiščite vse podnize, v katerih so dve ali več enakih črk zapored.
Dan niz:
let str = 'aaa aaa bbb bbb ccc ddd';
Poiščite vse podnize, v katerih sta dve enaki besedi zapored.