⊗jsSpRERMC 127 of 294 menu

Callback in die replace metode in JavaScript regex

Die replace metode kan as tweede parameter nie net 'n string nie, maar ook 'n callback-funksie aanvaar, wat vir elke gevonde ooreenkoms toegepas sal word. Elke substring wat die regex vind, sal vervang word deur wat hierdie funksie spesifiek vir daardie substring teruggee.

Aan hierdie funksie kan parameters oorgedra word: in die eerste parameter sal die gevonde string geplaas word, in die tweede parameter - die eerste vanggroep, in die derde parameter - die tweede vanggroep ensovoorts - jy kan soveel parameters maak as wat daar vangroepe in die reguliere uitdrukking is.

In die voorlaaste parameter sal die posisie van die gevonde ooreenkoms geplaas word, en in die laaste een - die hele string waarop die soektog gedoen word.

Hoe dit alles werk - sal ons aan praktiese voorbeelde ondersoek.

Voorbeeld

Laat daar 'n string met getalle gegee wees:

let str = '2 3 4 5';

Kom ons vervang hierdie getalle met hul kwadrate. Om te begin, laat ons net ons getalle een vir een in die konsole uitvoer in die callback-funksie:

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

Ons kode sal eers '2' uitvoer, dan '3', '4' en '5'. Dit wil sê die veranderlike match ontvang agtereenvolgens daardie strings wat die regex gevind het.

Laat ons die probleem tot die einde oplos - ons sal match kwadreer en dit teruggee met return. Dan sal gebeur dat vir die gevonde twee, 4 teruggegee word en die twee deur hierdie vier vervang word, vir die gevonde drie sal 9 teruggegee word en die drie deur hierdie nege vervang word - ensovoorts:

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

Voorbeeld

Laat daar nou in die string konstruksies van die vorm '2+3=' gegee wees:

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

Laat ons dit so maak dat die somme van die ooreenstemmende getalle na die gelykant ingevoeg word. Dit wil sê ons string moet in die volgende verander:

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

Om die probleem op te los, laat ons weer eksperimenteer - laat ons die eerste en tweede term in afsonderlike vangroepe plaas:

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

En laat ons nou die probleem finaal oplos: vir elke gevonde substring, som ons die eerste en tweede vangroep op, neem die nulde vangroep (die gevonde string, byvoorbeeld '2+3='), voeg die resultaat daaraan en gee dit alles terug via return:

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

Praktiese probleme

Daar word 'n string gegee:

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

Vind die getalle tussen hakies en verdubbel hulle. Dit wil sê uit ons string moet die volgende ontstaan:

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

Daar word 'n string gegee:

let str = '123 456 789';

Vind alle getalle en draai hulle syfers in die omgekeerde volgorde om. Dit wil sê uit ons string moet die volgende ontstaan:

'321 654 987'

Daar word 'n string met datums gegee:

let str = '31.12.2025 30.11.2024 29.10.2023';

Vind alle datums en omskep hulle in 'n ander formaat sodat die volgende string ontstaan:

'2025-12-31 2024-11-30 2023-10-29'
Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp