Μη-αποθηκευτικές παρενθέσεις στις κανονικές εκφράσεις JavaScript
Οι παρενθέσεις ( ) εκτελούν δύο λειτουργίες -
ομαδοποίηση χαρακτήρων και λειτουργία "πακέτου". Και
τι κάνουμε αν χρειαζόμαστε ομαδοποίηση,
αλλά δεν θέλουμε να το βάλουμε σε "πακέτο";
Για την επίλυση αυτού του προβλήματος έχουν σχεδιαστεί ειδικές
μη-αποθηκευτικές παρενθέσεις (?: )
- ομαδοποιούν, αλλά δεν τοποθετούν σε "πακέτο".
Παράδειγμα
Στο επόμενο παράδειγμα, οι πρώτες παρενθέσεις χρειαζόμαστε για ομαδοποίηση, και οι δεύτερες - για "πακέτο". Ωστόσο, και οι δύο παρενθέσεις αποθηκεύουν δεδομένα στο "πακέτο":
let str = 'abab123';
let res = str.match(/(ab)+([1-9]+)/);
Σαν αποτέλεσμα, στα "πακέτα" μας θα έχουμε τα εξής:
console.log(res[0]); // θα εμφανίσει 'abab123'
console.log(res[1]); // θα εμφανίσει 'ab'
console.log(res[2]); // θα εμφανίσει '123'
Παράδειγμα
Ας κάνουμε έτσι ώστε το πρώτο ζευγάρι παρενθέσεων μόνο να ομαδοποιεί, αλλά να μην τοποθετεί σε "πακέτο":
let str = 'abab123';
let res = str.match(/(?:ab)+([1-9]+)/);
Σαν αποτέλεσμα, στο πρώτο "πακέτο" θα είναι ο αριθμός μας:
console.log(res[1]); // θα εμφανίσει '123'