⊗jsSpRERMC 127 of 294 menu

Callback w metodzie replace w wyrażeniach regularnych JavaScript

Metod replace jako drugi parametr może przyjmować nie tylko ciąg znaków, ale także funkcję callback, która zostanie zastosowana dla każdego znalezionego dopasowania. Każdy podciąg, który znajdzie wyrażenie regularne, zostanie zastąpiony tym, co zwróci ta funkcja właśnie dla tego podciągu.

Do tej funkcji można przekazywać parametry: do pierwszego parametru trafi znaleziony ciąg znaków, do drugiego parametru - pierwsza grupa przechwytująca, do trzeciego parametru - druga grupa przechwytująca i tak dalej - można robić tyle parametrów, ile grup przechwytujących w wyrażeniu regularnym.

Do przedostatniego parametru trafi pozycja znalezionego dopasowania, a do ostatniego - cały ciąg znaków, po którym odbywa się wyszukiwanie.

Jak to wszystko działa - przeanalizujemy na praktycznych przykładach.

Przykład

Niech będzie dany ciąg znaków z liczbami:

let str = '2 3 4 5';

Zamieńmy te liczby na ich kwadraty. Na początek po prostu wypiszmy nasze liczby po kolei do konsoli w funkcji callback:

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

Nasz kod wypisze najpierw '2', potem '3', '4' i '5'. To znaczy do zmiennej match kolejno trafiają te ciągi znaków, które znalazło wyrażenie regularne.

Rozwiążmy zadanie do końca - podnieśmy match do kwadratu i zwróćmy go za pomocą return. Okaże się, że dla znalezionej dwójki zwrócone zostanie 4 i dwójka zostanie zastąpiona tą czwórką, dla znalezionej trójki zwrócone zostanie 9 i trójka zostanie zastąpiona tą dziewiątką - i tak dalej:

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

Przykład

Niech teraz w ciągu znaków będą dane konstrukcje typu '2+3=':

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

Sprawmy, żeby po znaku równości wstawione zostały sumy odpowiednich liczb. To znaczy nasz ciąg znaków powinien przekształcić się w następujący:

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

Aby rozwiązać zadanie, poeksperymentujmy ponownie - rozłóżmy pierwszą i drugą liczbę do oddzielnych grup przechwytujących:

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

A teraz rozwiążmy zadanie ostatecznie: dla każdego znalezionego podciągu zsumujmy pierwszą i drugą grupę przechwytującą, weźmy zerową grupę (znaleziony ciąg znaków, na przykład '2+3='), dodajmy do niego wynik i zwróćmy to wszystko przez return:

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

Zadania praktyczne

Dany jest ciąg znaków:

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

Znajdź liczby stojące w nawiasach i zwiększ je dwukrotnie. To znaczy z naszego ciągu znaków powinien powstać następujący:

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

Dany jest ciąg znaków:

let str = '123 456 789';

Znajdź wszystkie liczby i odwróć ich cyfry w odwrotnej kolejności. To znaczy z naszego ciągu znaków powinien powstać następujący:

'321 654 987'

Dany jest ciąg znaków z datami:

let str = '31.12.2025 30.11.2024 29.10.2023';

Znajdź wszystkie daty i przekształć je w inny format tak, aby otrzymać następujący ciąg znaków:

'2025-12-31 2024-11-30 2023-10-29'
Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć