Παράδειγμα JavaScript Regex Match - Πώς να χρησιμοποιήσετε το JS Replace σε μια συμβολοσειρά

Οι προγραμματιστές χρησιμοποιούν επεξεργαστές κειμένου για μεγάλο χρονικό διάστημα. Και όπως τα περισσότερα εργαλεία, όλοι οι συντάκτες κειμένου έχουν ένα κοινό χαρακτηριστικό: εύρεση και αντικατάσταση.

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

Δεν μπορεί μόνο να αντικαταστήσει απλές χορδές, αλλά και μοτίβα. Αυτά τα μοτίβα είναι γνωστά ως Κανονικές εκφράσεις .

Υπάρχουν τακτικές εκφράσεις στο JavaScript και στις περισσότερες άλλες γλώσσες προγραμματισμού. Το Regex (για συντομία) είναι ένα πολύ ισχυρό εργαλείο για να σας βοηθήσει να βρείτε απλά και πολύπλοκα μοτίβα αναζήτησης.

Οι αλγόριθμοι αναζήτησης συμβολοσειρών αποτελούν επίσης σημαντικό κλάδο της επιστήμης των υπολογιστών. Σε αυτό το άρθρο θα μάθουμε πώς να χρησιμοποιούμε αυτό το καταπληκτικό εργαλείο σε JavaScript.

Γιατί οι τυπικές εκφράσεις;

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

Θα μπορούσατε να το κάνετε χειροκίνητα, αλλά υπάρχει μια εξαιρετικά γρήγορη μέθοδος που μπορεί να το κάνει για εσάς. Οι περισσότεροι σύγχρονοι συντάκτες κειμένου επιτρέπουν στο Regex στην επιλογή Εύρεση. Συνήθως συμβολίζεται με .*.

Και αυτό δεν μπορεί να κάνει μόνο το regex - τα email είναι απλώς ένα παράδειγμα. Θα μπορούσατε να αναζητήσετε οποιονδήποτε τύπο συμβολοσειράς που ακολουθεί ένα μοτίβο, για παράδειγμα διευθύνσεις URL ή κείμενο μεταξύ παρενθέσεων.

Το Regex μπορεί επίσης να χρησιμοποιηθεί για την επικύρωση ορισμένων τύπων μοτίβων, όπως η επικύρωση email. Θα μπορούσατε να αντικαταστήσετε κάποια μακρά λογική επικύρωσης όπως αυτή:

function IsValidEmail(email) { if (email.length <= 2) { return false; } if (email.indexOf("@") == -1) { return false; } var parts = email.split("@"); var dot = parts[1].indexOf("."); var len = parts[1].length; var dotSplits = parts[1].split("."); var dotCount = dotSplits.length - 1; if (dot == -1 || dot  2) { return false; } for (var i = 0; i < dotSplits.length; i++) { if (dotSplits[i].length == 0) { return false; } } return true; };

Με μία μόνο γραμμή ως εξής:

function isValidEmail(email) { return /^(([^()\[\]\\.,;:\[email protected]"]+(\.[^()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(email); }

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

Ταίριασμα Regex JavaScript

Στο JavaScript, έχουμε μια μέθοδο αντιστοίχισης για χορδές. Αυτή η μέθοδος μπορεί να χρησιμοποιηθεί για να ταιριάξει το Regex σε μια συμβολοσειρά.

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

str.match(regexp)

Αυτό θα επιστρέψει έναν πίνακα όλων των αντιστοιχιών στη συμβολοσειρά αναζήτησης ( str) για κανονική έκφραση ( regexp).

Μια βασική χρήση αυτής της μεθόδου θα ήταν η μέτρηση όλων των λέξεων σε μια συμβολοσειρά. Για παράδειγμα:

var str = "This is a test string"; var matchArr = str.match(/\w+/g); console.log(matchArr.length); //prints 5

Θα μάθουμε για αυτήν την \w+κανονική έκφραση αργότερα σε αυτό το άρθρο.

Χρησιμοποιώντας τέτοιες κανονικές εκφράσεις, μπορούμε να εκτελέσουμε διάφορες εργασίες που διαφορετικά θα απαιτούσαν από εμάς να γράψουμε κουραστική λογική. Ένα παράδειγμα ήταν η λειτουργία επικύρωσης email. Πρέπει να δοκιμάσουμε όλα τα κριτήρια, αλλά χρησιμοποιώντας το regex μπορείτε να το απλοποιήσετε.

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

Μέθοδος αντικατάστασης JavaScript

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

const newStr = str.replace(regexp|substr, newSubstr|function)

Όπως μπορείτε να δείτε, η μέθοδος αντικατάστασης ενεργεί σε μια συμβολοσειρά και επιστρέφει μια συμβολοσειρά. Χρειάζονται δύο παράμετροι: η συμβολοσειρά που θα αντικατασταθεί και με τι θα αντικατασταθεί.

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

Η δεύτερη παράμετρος θα μπορούσε επίσης να είναι μια συνάρτηση. Για να το δείξουμε, ας δούμε ένα παράδειγμα:

var str = "This is a test string"; var newStr = str.replace(/\w+/g, function(match) { return match.split("").reverse().join(""); }); console.log(newStr); //prints "sihT si a tset gnirts"

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

Η μέθοδος αντικατάστασης μπορεί να είναι χρήσιμη εάν θέλετε να αντικαταστήσετε ένα συγκεκριμένο μοτίβο αναζήτησης με κάποια άλλη συμβολοσειρά μετά από κάποια επεξεργασία της αρχικής συμβολοσειράς.

Μπορεί επίσης να χρησιμοποιηθεί για τη διόρθωση μη έγκυρης αντιστοίχισης - για παράδειγμα για επικύρωση email και, αν είναι δυνατόν, για διόρθωση μη έγκυρων email.

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

Βασικές τυπικές εκφράσεις

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

Κυριολεκτικά

Μια γραμματική είναι οποιοδήποτε χαρακτήρα που αξιολογείται ως η ίδια και όχι σε οποιαδήποτε γενική μορφή. Έτσι, wordείναι επίσης μια έγκυρη κανονική έκφραση που θα ταιριάζει μόνο με τη λέξη .

Εάν θέλετε να αντικαταστήσετε όλες τις εμφανίσεις μιας δεδομένης λέξης σε JavaScript, μπορείτε να το κάνετε αυτό:

var str = "JavaScript is a very popular programming language. javascript is used in web developement. javascript is very easy to learn."; var newStr = str.replace(/javascript/gi,"js"); console.log(newStr); /* prints "js is a very popular programming language. js is used in web developement. js is very easy to learn." */

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

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

Thus a literal can be used to match a specific character or group of characters.

Meta-characters

A meta-character is used for generic search, such as to search any digit, any character, or any alpha-numeric character. These are some common meta-characters:

  • \d matches any digit, that is, digits from 0 to 9
  • \w matches any alpha-numeric character, That is, alphabets a-z, A-Z and digits 0-9.
  • \s matches any whitespace

Similarly, \D , \W and \S match any non-digit, non-alphanumeric, and non-whitespace characters, respectively. For example, \d\d\d would match any three digits in a row.

Quantifiers

A quantifier is used to quantify any literal or meta-character. It can be used to select multiple occurrences of a given character. There are four types of quantifiers defined in regex:

  • * is used to match 0 or more occurrences of a given character.
  • + is used to match 1 or more occurrences of a given character.
  • . is used to match either no occurrence or 1 occurrence of a given character.
  • {min,max} or {n} can be used to match a number of occurrences in a range or a given number of times n

An example would be the one we used above to reverse every word in a string.

  • \w+ matches every word in a string
  • \w matches any alpha-numeric character
  • \w+ matches one or more occurrences of an alpha-numeric character, that is, every word in a string.

We could also use quantifiers to replace multiple whitespaces with a single whitespace. For example:

var str = "This is a string with multiple whitespaces"; var newStr = str.replace(/\s\s+/g, " "); console.log(newStr); //prints "This is a string with multiple whitespaces"

There are plenty of other uses for quantifiers.

Position meta-characters

There are also position meta-characters which represent a position. For example ^ represents the start of a line, $ represents end of a line, and \b represents word boundaries.

Conclusion

In this article, we learned how important regular expressions are. We also saw how they can be used for searching simple as well as complex search patterns.

This has great potential in programming with text. String-matching algorithms are used in DNA matching and form a significant branch of computer science.

Μόλις κυριαρχήσετε το regex μπορείτε να το χρησιμοποιήσετε με την αντιστοίχιση JavaScript και να αντικαταστήσετε μεθόδους για να απλοποιήσετε τα μεγάλα προγράμματα και να το χρησιμοποιήσετε για επικύρωση συγκεκριμένων μοτίβων. Το Regex μπορεί επίσης να συντομεύσει τα μακρά προγράμματα και να τα καταστήσει πιο κατανοητά.

Τώρα μπορείτε να χρησιμοποιήσετε τη δική σας δημιουργικότητα και να κάνετε υπέροχο regex - τόσο καλή τύχη με τη νέα σας ικανότητα.

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

Γεια, ελπίζω να σας άρεσε αυτό το άρθρο και να μάθετε κάτι . Μπορείτε να με βρείτε στο σπίτι μου στο Διαδίκτυο, στο theabbie.github.io ή στο Github μου. Ελέγξτε τα άλλα άρθρα μου. Ευχαριστώ.