Αναγνώστες σαν εσάς βοηθούν στην υποστήριξη του MUO. Όταν κάνετε μια αγορά χρησιμοποιώντας συνδέσμους στον ιστότοπό μας, ενδέχεται να κερδίσουμε μια προμήθεια θυγατρικών. Διαβάστε περισσότερα.

Οι τυπικές εκφράσεις, ευρέως γνωστές ως "regex" ή "regexp", είναι συμβολοσειρές που περιγράφουν ένα μοτίβο αναζήτησης. Μπορείτε να χρησιμοποιήσετε κανονικές εκφράσεις για να ελέγξετε εάν μια συμβολοσειρά περιέχει ένα συγκεκριμένο μοτίβο, να εξαγάγετε πληροφορίες από μια συμβολοσειρά και να αντικαταστήσετε μέρη μιας συμβολοσειράς με νέο κείμενο.

Μάθετε τη βασική σύνταξη των τυπικών εκφράσεων και πώς να τις χρησιμοποιείτε σε JavaScript.

Η βασική σύνταξη των κανονικών εκφράσεων

Υπάρχουν δύο τρόποι με τους οποίους μπορείτε να δημιουργήσετε μια τυπική έκφραση σε JavaScript: χρησιμοποιώντας μια τυπική έκφραση κατά λέξη και χρησιμοποιώντας το RegExp κατασκευαστής.

Μια κανονική έκφραση κυριολεκτικά αποτελείται από ένα μοτίβο που περικλείεται ανάμεσα σε κάθετες προς τα εμπρός, ακολουθούμενο από μια προαιρετική σημαία.

instagram viewer

Για παράδειγμα:

// Χωρίς σημαία
συνθ regexExpression_1 = /pattern/

// Με σημαία
συνθ regexExpression_2 = /pattern/σημαία

Η σημαία είναι μια προαιρετική παράμετρος που μπορείτε να προσθέσετε σε μια τυπική έκφραση για να τροποποιήσετε τη συμπεριφορά της. Για παράδειγμα:

συνθ regexFlag = /the/g;

ο σολ Η σημαία υποδεικνύει ότι η έκφραση πρέπει να ταιριάζει με όλες τις εμφανίσεις, όχι μόνο με την πρώτη.

Μπορείτε επίσης να δημιουργήσετε μια τυπική έκφραση χρησιμοποιώντας το RegExp κατασκευαστής. Για παράδειγμα:

συνθ regexExpression = νέοςRegExp("Πρότυπο", "σολ");

ο RegExp Ο κατασκευαστής παίρνει δύο παραμέτρους: ένα μοτίβο—μια συμβολοσειρά ή μια τυπική έκφραση κυριολεκτικά—και μια σημαία (ες).

Υπάρχουν δύο αρκετά κοινές σημαίες που θα χρησιμοποιήσετε με κανονική έκφραση στο JavaScript:

  • σολ: Η καθολική σημαία κάνει την τυπική έκφραση να ταιριάζει με όλες τις εμφανίσεις του μοτίβου στη δεδομένη συμβολοσειρά αντί για μία μεμονωμένη εμφάνιση.
  • Εγώ: Η σημαία χωρίς διάκριση πεζών-κεφαλαίων κάνει την τυπική έκφραση να αγνοεί τα πεζά και πεζά του μοτίβου και να ταιριάζει με κεφαλαίους και πεζούς χαρακτήρες στη δεδομένη συμβολοσειρά.

Μπορείτε να χρησιμοποιήσετε σημαίες μαζί σε μία έκφραση με οποιαδήποτε σειρά. Για παράδειγμα:

συνθ regexExpression = νέοςRegExp("Πρότυπο", "γι");

Αυτή η έκφραση θα ταιριάζει με όλες τις εμφανίσεις του "Pattern", ανεξάρτητα από την περίπτωση.

Στις κανονικές εκφράσεις, ορισμένοι χαρακτήρες, γνωστοί ως μεταχαρακτήρες, έχουν ειδική σημασία. Μπορείτε να τα χρησιμοποιήσετε για να ταιριάξετε συγκεκριμένους τύπους χαρακτήρων ή μοτίβων.

Εδώ είναι μερικοί από τους πιο συχνά χρησιμοποιούμενους μεταχαρακτήρες και τις έννοιές τους:

  • Ο χαρακτήρας μπαλαντέρ (.): Αυτός ο χαρακτήρας ταιριάζει με οποιονδήποτε μεμονωμένο χαρακτήρα εκτός από μια νέα γραμμή. Είναι ένα χρήσιμο εργαλείο για την αντιστοίχιση μοτίβων με άγνωστους χαρακτήρες.
  • The Kleene Star (*): Αυτός ο χαρακτήρας ταιριάζει με μηδέν ή περισσότερες εμφανίσεις του προηγούμενου χαρακτήρα ή ομάδας. Επιτρέπει στον προηγούμενο χαρακτήρα ή ομάδα να εμφανίζεται πολλές φορές στη συμβολοσειρά, συμπεριλαμβανομένου του μηδενός.
  • Ο προαιρετικός χαρακτήρας (?): Αυτός ο χαρακτήρας αντιστοιχεί σε μηδέν ή μία εμφάνιση ενός προηγούμενου χαρακτήρα ή ομάδας.
  • Άγκυρα έναρξης γραμμής (^): Αυτός ο χαρακτήρας αντιστοιχεί μόνο στην αρχή μιας γραμμής ή μιας συμβολοσειράς.
  • Άγκυρα τέλους γραμμής ($): Αυτός ο χαρακτήρας ταιριάζει με το τέλος μιας γραμμής ή συμβολοσειράς.
  • Σύνολο χαρακτήρων/κατηγορία ([]): Ένα σύνολο χαρακτήρων ταιριάζει με οποιονδήποτε χαρακτήρα από ένα σύνολο χαρακτήρων σε μια συμβολοσειρά. Τα ορίζετε χρησιμοποιώντας αγκύλες [] και μπορείτε να καθορίσετε ένα σύνολο σταθερών χαρακτήρων, ειδικών χαρακτήρων ή ορισμένων ομάδων χαρακτήρων.
  • Εναλλακτικός χαρακτήρας (|): Αυτός ο χαρακτήρας ταιριάζει με τον προηγούμενο ή τον ακόλουθο χαρακτήρα ή ομάδα. Λειτουργεί παρόμοια με το OR Χειριστής JavaScript.
  • Ομαδοποίηση χαρακτήρα (()): Ο χαρακτήρας ομαδοποίησης σάς επιτρέπει να ομαδοποιείτε χαρακτήρες ή υπο-εκφράσεις, να εφαρμόζετε τελεστές σε αυτά ως μονάδα και να ελέγχετε τη σειρά των λειτουργιών.

Δοκιμή μιας συμβολοσειράς ενάντια σε μια τυπική έκφραση σε JavaScript

Στο JavaScript, μπορείτε να δοκιμάσετε μια συμβολοσειρά σε μια τυπική έκφραση χρησιμοποιώντας διάφορες μεθόδους.

Αυτή η ενότητα προϋποθέτει ότι έχετε μια βασική κατανόηση των κανονικών εκφράσεων και προτύπων. Εάν αισθάνεστε άβολα με τις κανονικές εκφράσεις, ελέγξτε έξω ένας οδηγός αρχαρίων για κανονικές εκφράσεις πρώτα.

Η μέθοδος δοκιμής

ο .δοκιμή() Η μέθοδος επιστρέφει ένα boolean υποδεικνύοντας εάν η τυπική έκφραση ταιριάζει με τη συμβολοσειρά ή όχι. Αυτή η μέθοδος παίρνει μια συμβολοσειρά για να εκτελέσει την αναζήτηση ως όρισμα. Είναι ιδιαίτερα χρήσιμο για απλούς ελέγχους.

Για παράδειγμα:

αφήνω regex = /.com$/;
αφήνω str = "example.com";
κονσόλα.log (regex.test (str)); // αληθές

Αυτή η τυπική έκφραση ταιριάζει με μια συμβολοσειρά που τελειώνει με ".com".

Η μέθοδος exec

ο .exec() μέθοδος επιστρέφει έναν πίνακα που περιέχει το αντιστοιχισμένο κείμενο και τυχόν ομάδες που έχουν καταγραφεί ή μηδενικό αν δεν βρει ταίρι. Αυτή η μέθοδος παίρνει μια συμβολοσειρά για να εκτελέσει την αναζήτηση ως όρισμα. Είναι χρήσιμο για πιο σύνθετες κανονικές εκφράσεις.

Για παράδειγμα:

αφήνω regex = /^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
αφήνω str = "123-456-7890";
αφήνω αποτέλεσμα = regex.exec (str);

αν (αποτέλεσμα !== μηδενικό) {
κονσόλα.κούτσουρο(`${αποτέλεσμα[0]} είναι έγκυρος αριθμός τηλεφώνου».);
} αλλού {
κονσόλα.κούτσουρο("Μη έγκυρος αριθμός τηλεφώνου");
}

Η παραπάνω τυπική έκφραση ταιριάζει με μια συμβολοσειρά που ξεκινά με ένα προαιρετικό "(", τρία ψηφία και ένα προαιρετικό ")". Στη συνέχεια αναζητά ένα προαιρετικό "-", ".", ή διάστημα, ακολουθούμενο από τρία ψηφία. Τελικά αναζητά ένα προαιρετικό "-", ".", ή κενό που ακολουθείται από τέσσερα ψηφία στο τέλος της συμβολοσειράς.

Αυτή η τυπική έκφραση ταιριάζει με αριθμούς τηλεφώνου με τη μορφή "(xxx) xxx-xxxx", "xxx-xxx-xxxx", "xxx.xxx.xxxx" ή "xxx xxx xxxx".

Αν βρει ταίρι, .exec() επιστρέφει έναν πίνακα που περιέχει το αντιστοιχισμένο κείμενο και τυχόν ομάδες που έχουν καταγραφεί (που ορίζονται από παρενθέσεις). Θα περιλαμβάνει κάθε ομάδα ως πρόσθετο στοιχείο στον πίνακα που επιστρέφει. Αυτό σας επιτρέπει να έχετε πρόσβαση σε συγκεκριμένα μέρη του αντιστοιχισμένου κειμένου, τα οποία μπορούν να σας βοηθήσουν να εξαγάγετε πληροφορίες από μια συμβολοσειρά.

Η μέθοδος αντικατάστασης

ο .αντικαθιστώ() Η μέθοδος αναζητά μια αντιστοίχιση μεταξύ μιας κανονικής έκφρασης και μιας συμβολοσειράς και αντικαθιστά το αντιστοιχισμένο κείμενο με ένα καθορισμένο κείμενο αντικατάστασης. Αυτή είναι μια μέθοδος αντικειμένων συμβολοσειρών και παίρνει μια κανονική έκφραση και μια συμβολοσειρά αντικατάστασης ως ορίσματα.

Για παράδειγμα:

αφήνω χορδή = "Η γρήγορη καφέ αλεπού πηδάει πάνω από το τεμπέλικο σκυλί.";
αφήνω έκφραση = /The/gi;
αφήνω newString = string.replace (έκφραση, "ένα");
κονσόλα.log (newString); // "μια γρήγορη καφετιά αλεπού πηδά πάνω από ένα τεμπέλικο σκυλί."

Αυτό το παράδειγμα καλεί το αντικαθιστώ() μέθοδος στο σειρά μεταβλητή, περνώντας την κανονική έκφραση, έκφραση. Η τυπική έκφραση θα ταιριάζει με όλες τις εμφανίσεις του "The" στη συμβολοσειρά, ανεξάρτητα από την περίπτωση. Η κλήση στη μέθοδο αντικατάστασης της δίνει εντολή να αντικαταστήσει κάθε εμφάνιση με τη συμβολοσειρά "a".

Θέματα απόδοσης κατά τη χρήση κανονικών εκφράσεων

Αν και οι κανονικές εκφράσεις βοηθούν στην αντιστοίχιση και τον χειρισμό των συμβολοσειρών, μπορεί επίσης να είναι δαπανηρές όσον αφορά την απόδοση. Το να κάνετε όσο το δυνατόν πιο συγκεκριμένα μοτίβα και να τα διατηρήσετε απλά είναι ζωτικής σημασίας για να διατηρηθούν αποτελεσματικά.