⊗jsSpRERMC 127 of 294 menu

Spätné volanie v metóde replace v regulárnych výrazoch JavaScript

Metóda replace ako druhý parameter môže prijímať nielen reťazec, ale aj funkciu-spätné volanie, ktorá sa aplikuje pre každý nájdený zhodu. Každý podreťazec, ktorý nájde regulárny výraz, sa nahradí tým, čo vráti táto funkcia práve pre tento podreťazec.

Do tejto funkcie je možné odovzdávať parametre: do prvého parametra sa vloží nájdený reťazec, do druhého parametra - prvá zachytená skupina, do tretieho parametra - druhá zachytená skupina a tak ďalej - je možné vytvoriť toľko parametrov, koľko je zachytených skupín v regulárnom výraze.

Do predposledného parametra sa vloží pozícia nájdenej zhody a do posledného - celý reťazec, v ktorom sa vykonáva vyhľadávanie.

Ako to všetko funguje - rozoberieme na praktických príkladoch.

Príklad

Nech je daný reťazec s číslami:

let str = '2 3 4 5';

Nahraďme tieto čísla ich štvorcami. Na začiatok si jednoducho vypíšme naše čísla postupne do konzoly vo funkcii-spätnom volaní:

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

Náš kód vypíše najprv '2', potom '3', '4' a '5'. To znamená že do premennej match postupne prichádzajú reťazce, ktoré našiel regulárny výraz.

Poďme vyriešiť úlohu do konca - budeme umocňovať match na druhú a vrátime ho pomocou return. Vyjde, že pre nájdenú dvojku sa vráti 4 a dvojka sa nahradí tou štvorkou, pre nájdenú trojku sa vráti 9 a trojka sa nahradí tou deviatkou - a tak ďalej:

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

Príklad

Nech teraz v reťazci sú dané konštrukcie typu '2+3=':

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

Urobme tak, aby sa za rovnáso vložili súčty príslušných čísel. To znamená, že náš reťazec sa musí premeniť na nasledujúci:

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

Pre riešenie úlohy sa opäť poexperimentujme - rozložme prvé a druhé sčítance do samostatných zachytených skupín:

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

A teraz úlohu dokončite: pre každý nájdený podreťazec sčítajme prvú a druhú zachytenú skupinu, vezmime nulovú skupinu (nájdený reťazec, napríklad '2+3='), pridajme k nemu výsledok a vráťme to všetko cez return:

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

Praktické úlohy

Daný reťazec:

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

Nájdite čísla stojace v zátvorkách a zväčšite ich dvakrát. To znamená z nášho reťazca by mal vzniknúť nasledujúci:

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

Daný reťazec:

let str = '123 456 789';

Nájdite všetky čísla a otočte ich číslice v opačnom poradí. To znamená z nášho reťazca by mal vzniknúť nasledujúci:

'321 654 987'

Daný reťazec s dátumami:

let str = '31.12.2025 30.11.2024 29.10.2023';

Nájdite všetky dátumy a pretransformujte ich do iného formátu tak, aby vznikol nasledujúci reťazec:

'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
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť