Παύλα εντός συνόλων στις κανονικές εκφράσεις JavaScript
Η παύλα - είναι επίσης ειδικός χαρακτήρας εντός [ ]
(ενώ εκτός - όχι). Εάν χρειάζεστε την ίδια την παύλα ως χαρακτήρα - τότε τοποθετήστε την σε θέση,
όπου δεν θα γίνει αντιληπτή ως διαχωριστής
ομάδας.
Γιατί είναι σημαντικό: μπορείτε να δημιουργήσετε μια ομάδα
χαρακτήρων, χωρίς να το παρατηρήσετε. Για παράδειγμα,
έτσι - '[:-@]' - νομίζετε ότι
επιλέγετε άνω και κάτω τελεία, παύλα και at,
αλλά στην πραγματικότητα προκύπτει ομάδα χαρακτήρων μεταξύ
: και @. Σε αυτήν την ομάδα περιλαμβάνονται
οι ακόλουθοι χαρακτήρες: ? < = > : ;
Από πού προέρχονται; Από τον πίνακα ASCII - η άνω και κάτω τελεία έχει μικρότερο αριθμό από το at - και προκύπτει ομάδα. Δηλαδή όλες οι ομάδες προκύπτουν βάσει του πίνακα ASCII (αν θέλετε μπορείτε να το χρησιμοποιήσετε αυτό).
Πώς να το αντιμετωπίσετε: τοποθετήστε τον χαρακτήρα παύλας
σε θέση όπου σίγουρα δεν θα γίνει αντιληπτός ως
σύμβολο ομάδας, για παράδειγμα, στην αρχή ή στο τέλος
(δηλαδή μετά το [ή πριν από το ]).
Μπορείτε επίσης να δώσετε escape στην παύλα - τότε
θα συμβολίζει τον εαυτό της ανεξάρτητα από τη
θέση. Για παράδειγμα, αντί για [:-@] να γράψετε
[:\-@] - και δεν θα υπάρχει πλέον ομάδα, αλλά
θα υπάρχουν τρεις χαρακτήρες - άνω και κάτω τελεία, παύλα και at
@.
Παράδειγμα
Στο επόμενο παράδειγμα το μοτίβο αναζήτησης είναι:
ψηφίο 1, μετά γράμμα από 'a'
έως 'z', μετά ψηφίο 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a-z]2/g, '!');
Ως αποτέλεσμα στη μεταβλητή θα καταγραφεί το ακόλουθο:
'! 1-2 ! !'
Παράδειγμα
Ας κάνουμε τώρα escape στην παύλα. Ως αποτέλεσμα
το μοτίβο αναζήτησης είναι: ψηφίο 1, μετά
γράμμα 'a', ή παύλα, ή γράμμα 'z',
μετά ψηφίο 2:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[a\-z]2/g, '!');
Ως αποτέλεσμα στη μεταβλητή θα καταγραφεί το ακόλουθο:
'! ! 1c2 !'
Παράδειγμα
Μπορείτε απλά να μετακινήσετε την παύλα, χωρίς να κάνετε escape:
let str = '1a2 1-2 1c2 1z2';
let res = str.replace(/1[az-]2/g, '!');
Ως αποτέλεσμα στη μεταβλητή θα καταγραφεί το ακόλουθο:
'! ! 1c2 !'
Παράδειγμα
Στο επόμενο παράδειγμα το μοτίβο αναζήτησης είναι:
πρώτος χαρακτήρας - είναι μικρά γράμματα ή
παύλα '-', μετά δύο γράμματα 'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-z-]xx/g, '!');
Ως αποτέλεσμα στη μεταβλητή θα καταγραφεί το ακόλουθο:
'! Axx ! @xx'
Παράδειγμα
Στο επόμενο παράδειγμα το μοτίβο αναζήτησης είναι:
πρώτος χαρακτήρας - είναι μικρά, κεφαλαία
γράμματα ή παύλα '-', μετά δύο γράμματα
'x':
let str = 'axx Axx -xx @xx';
let res = str.replace(/[a-zA-Z-]xx/g, '!');
Ως αποτέλεσμα στη μεταβλητή θα καταγραφεί το ακόλουθο:
'! ! ! @xx'
Παράδειγμα
Μπορείτε να τοποθετήσετε την παύλα ανάμεσα σε δύο ομάδες - εκεί σίγουρα δεν θα δημιουργήσει μια ακόμη ομάδα:
let str = 'axx 9xx -xx @xx';
let res = str.replace(/[a-z-0-9]xx/g, '!');
Ως αποτέλεσμα στη μεταβλητή θα καταγραφεί το ακόλουθο:
'! ! ! @xx'
Πρακτικές ασκήσεις
Δίνεται μια συμβολοσειρά:
let str = 'xaz xBz xcz x-z x@z';
Βρείτε όλες τις συμβολοσειρές σύμφωνα με το ακόλουθο μοτίβο:
γράμμα 'x', κεφαλαίο ή μικρό
γράμμα ή παύλα, γράμμα 'z'.
Δίνεται μια συμβολοσειρά:
let str = 'xaz x$z x-z xcz x+z x%z x*z';
Βρείτε όλες τις συμβολοσειρές σύμφωνα με το ακόλουθο μοτίβο:
γράμμα 'x', μετά ή δολάριο, ή
παύλα ή συν, μετά γράμμα 'z'.