⊗jsSpRERMC 127 of 294 menu

Callback в метода replace в регулярни изрази на JavaScript

Методът replace може да приема като втори параметър не само низ, но и функция-callback, която ще се приложи за всеки намерен съвпадение. Всеки подниз, който регулярният израз намери, ще бъде заменен с това, което върне тази функция именно за този подниз.

В тази функция могат да се подават параметри: в първия параметър ще се постави намереният низ, във втория параметър - първата група (capturing group), в третия параметър - втората група и така нататък - може да се направят толкова параметри, колкото групи има в регулярния израз.

В предпоследния параметър ще се постави позицията на намереното съвпадение, а в последния - целият низ, по който се извършва търсенето.

Как работи всичко това - ще разгледаме с практически примери.

Пример

Нека е даден низ с числа:

let str = '2 3 4 5';

Нека заменим тези числа с техните квадрати. Като начало нека просто да изведем числата ни едно по едно в конзолата във функцията-callback:

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

Нашият код първо ще изведе '2', после '3', '4' и '5'. Тоест в променливата match последователно попадат те низове, които регулярният израз намери.

Нека решим задачата до край - ще повдигаме match на квадрат и ще го връщаме с помощта на return. Ще се получи, че за намерената двойка ще се върне 4 и двойката ще се замени на тази четворка, за намерената тройка ще се върне 9 и тройката ще се замени на тази девятка - и така нататък:

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

Пример

Нека сега в низа са дадени конструкции от вида '2+3=':

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

Нека направим така, че след равно да се вмъкнат сумите на съответните числа. Тоест нашият низ трябва да се превърне в следния:

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

За решаване на задачата нека отново да експериментираме - да разделим първото и второто събираеми по отделни групи:

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

А сега окончателно да решим задачата: за всяка намерена подстрока да съберем първата и втората група, да вземем нулевата група (намерения низ, например '2+3='), да добавим към него резултата и да върнем всичко това чрез return:

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

Практически задачи

Даден е низ:

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

Намерете числата, стоящи в скоби и ги увеличете по два пъти. Тоест от нашия низ трябва да се получи следният:

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

Даден е низ:

let str = '123 456 789';

Намерете всички числа и обърнете цифрите им в обратен ред. Тоест от нашия низ трябва да се получи следният:

'321 654 987'

Даден е низ с дати:

let str = '31.12.2025 30.11.2024 29.10.2023';

Намерете всички дати и ги преобразувайте в друг формат така, че да се получи следният низ:

'2025-12-31 2024-11-30 2023-10-29'
Български
AfrikaansAzə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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне