⊗jsSpRERMC 127 of 294 menu

Povratni klic v metodi replace pri regularnih izrazih v JavaScriptu

Metoda replace lahko kot drugi parameter sprejme ne le niz, temveč tudi funkcijo-povratni klic, ki se bo uporabila za vsako najdeno ujemanje. Vsaka podniz, ki jo najde regularni izraz, se bo zamenjala s tem, kar vrne ta funkcija prav za to podniz.

V to funkcijo je mogoče posredovati parametre: v prvi parameter bo postavljena najdena niz, v drugi parameter - prvi zajem, v tretji parameter - drugi zajem in tako naprej - mogoče je narediti toliko parametrov, kolikor je zajemov v regularnem izrazu.

V predzadnji parameter bo postavljena pozicija najdenega ujemanja, v zadnji pa celotna niz, po kateri se izvaja iskanje.

Kako vse to deluje - si bomo razložili na praktičnih primerih.

Primer

Naj bo podan niz s števili:

let str = '2 3 4 5';

Zamenjajmo ta števila z njihovimi kvadrati. Za začek pa preprosto izpišimo naša števila eno za drugim v konzolo v funkciji-povratnem klicu:

str.replace(/\d+/g, function(match) { console.log(match); });

Naša koda bo najprej izpisala '2', nato '3', '4' in '5'. To pomeni, da v spremenljivko match zaporedoma vstopajo tisti nizi, ki jih je našel regularni izraz.

Rešimo nalogo do konca - dvignimo match na kvadrat in ga vrnimo z uporabo return. Izkazalo se bo, da se bo za najdeno dvojko vrnil 4 in dvojka se bo zamenjala s to štirico, za najdeno trojko se bo vrnil 9 in trojka se bo zamenjala s to devetko - in tako naprej:

let result = str.replace(/\d+/g, function (match) { return match**2; }); console.log(result); // izpiše '4 9 16 25'

Primer

Naj sedaj v nizu obstajajo konstrukcije oblike '2+3=':

let str = '2+3= 4+5= 6+7=';

Poskrbimo, da se za enačaj vstavijo vsote ustreznih števil. To pomeni, da se mora naš nis pretvoriti v naslednji:

'2+3=5 4+5=9 6+7=13'

Za rešitev naloge ponovno eksperimentirajmo - razstavimo prvi in drugi člen po ločenih zajemih:

str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) { console.log(match0, match1, match2); });

Zdaj pa končno rešimo nalogo: za vsako najdeno podniz seštejmo prvi in drugi zajem, vzemimo ničti zajem (najdeno niz, na primer '2+3='), dodajmo k njemu rezultat in vrnimo vse to preko return:

let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) { let sum = Number(match1) + Number(match2); return match0 + sum; }); console.log(result);

Praktične naloge

Podan je niz:

let str = 'aaa [2] bbb [3] ccc [12] ddd';

Poiščite števila, ki stojijo v oklepajih, in jih povečajte za dvakrat. To pomeni, da mora iz našega niza nastati naslednji:

'aaa [4] bbb [6] ccc [24] ddd'

Podan je niz:

let str = '123 456 789';

Poiščite vsa števila in obrnite njihove števke v obratnem vrstnem redu. To pomeni, da mora iz našega niza nastati naslednji:

'321 654 987'

Podan je niz z datumi:

let str = '31.12.2025 30.11.2024 29.10.2023';

Poiščite vse datume in jih pretvorite v drug format, tako da nastane naslednji niz:

'2025-12-31 2024-11-30 2023-10-29'
Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni