⊗jsSpRERMC 127 of 294 menu

Callback replace-metodissa JavaScriptin säännöllisissä lausekkeissa

Replace-metodi voi ottaa toisena parametrina ei vain merkkijonon, vaan myös callback-funktion, jota sovelletaan jokaiselle löydetylle osumalle. Jokainen osamerkkijono, jonka säännöllinen lauseke löytää, korvataan sillä, mikä tämä funktio palauttaa juuri tälle osamerkkijonolle.

Tähän funktioon voidaan välittää parametreja: ensimmäiseen parametriin laitetaan löydetty merkkijono, toiseen parametriin - ensimmäinen ryhmä (capture group), kolmanteen parametriin - toinen ryhmä ja niin edelleen - voidaan tehdä niin monta parametria kuin ryhmiä säännöllisessä lausekkeessa on.

Toiseksi viimeiseen parametriin laitetaan sijainti löydetystä osumasta, ja viimeiseen - koko merkkijono, josta haetaan.

Miten tämä kaikki toimii - käsittelemme käytännön esimerkkien avulla.

Esimerkki

Olkoon annettu merkkijono numeroilla:

let str = '2 3 4 5';

Korvataan nämä numerot niiden neliöillä. Aluksi yksinkertaisesti tulostetaan numeromme vuorotellen konsoliin callback-funktiossa:

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

Koodimme tulostaa ensin '2', sitten '3', '4' ja '5'. Eli muuttujaan match päätyvät peräkkäin ne merkkijonot, jotka säännöllinen lauseke löysi.

Ratkaistaan tehtävä loppuun - korotetaan match toiseen potenssiin ja palautetaan se käyttäen return:ia. Saadaan, että löydetylle kakkoselle palautuu 4 ja kakkosesta tulee tämä nelonen, löydetylle kolmoselle palautuu 9 ja kolmosesta tulee tämä yhdeksän - ja niin edelleen:

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

Esimerkki

Olkoon nyt merkkijonossa muotoa '2+3=' olevia rakenteita:

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

Tehdään niin, että yhtäsuuruusmerkin jälkeen lisätään vastaavien numeroiden summat. Eli meidän merkkijonosta pitäisi tulla seuraava:

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

Tehtävän ratkaisemiseksi kokeillaan vielä - jaetaan ensimmäinen ja toinen yhteenlaskettava omiin ryhmiinsä:

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

Ja nyt ratkaistaan tehtävä loppuun: jokaiselle löydetylle osamerkkijonolle lasketaan yhteen ensimmäinen ja toinen ryhmä, otetaan nollas ryhmä (löydetty merkkijono, esimerkiksi '2+3='), lisätään siihen tulos ja palautetaan kaikki tämä return:in kautta:

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

Käytännön tehtävät

Annettu merkkijono:

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

Etsi suluissa olevat numerot ja kasvata niitä kaksinkertaiseksi. Eli meidän merkkijonosta pitäisi tulla seuraava:

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

Annettu merkkijono:

let str = '123 456 789';

Etsi kaikki numerot ja käännä niiden numerot väärinpäin. Eli meidän merkkijonosta pitäisi tulla seuraava:

'321 654 987'

Annettu merkkijono päivämäärillä:

let str = '31.12.2025 30.11.2024 29.10.2023';

Etsi kaikki päivämäärät ja muunna ne toiseen muotoon niin, että saadaan seuraava merkkijono:

'2025-12-31 2024-11-30 2023-10-29'
Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää