⊗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. Θα γίνει έτσι ώστε για το 2 που βρέθηκε να επιστραφεί 4 και το 2 θα αντικατασταθεί από αυτό το 4, για το 3 που βρέθηκε θα επιστραφεί 9 και το 3 θα αντικατασταθεί από αυτό το 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štinaDanskDeutschEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Χρησιμοποιούμε cookie για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη