Απλά κόλπα RegEx για αρχάριους

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

Ρύθμιση προγράμματος επεξεργασίας κειμένου

Ενώ σχεδόν οποιοσδήποτε επεξεργαστής κειμένου υποστηρίζει Regular Expressions τώρα, θα χρησιμοποιήσω το Visual Studio Code για αυτό το σεμινάριο, αλλά μπορείτε να χρησιμοποιήσετε οποιοδήποτε πρόγραμμα επεξεργασίας που σας αρέσει. Επίσης, σημειώστε ότι συνήθως πρέπει να ενεργοποιήσετε το RegEx κάπου κοντά στην είσοδο αναζήτησης. Δείτε πώς μπορείτε να το κάνετε αυτό στον κώδικα VS:

1) . - Ταίριαξε οποιονδήποτε χαρακτήρα

Ας ξεκινήσουμε απλά. Το σύμβολο κουκκίδας .ταιριάζει με οποιονδήποτε χαρακτήρα:

b.t

Πάνω από RegEx αγώνες "bot”, "bat”καθώς και κάθε άλλη λέξη από τρεις χαρακτήρες που ξεκινά με bκαι τελειώνει σε t. Αλλά αν θέλετε να αναζητήσετε το σύμβολο κουκκίδων, πρέπει να το ξεφύγετε \, οπότε αυτό το RegEx αντιστοιχεί μόνο στο ακριβές κείμενο "b.t":

b\.t

2). * - Ταίριαξε οτιδήποτε

Εδώ .σημαίνει "οποιοσδήποτε χαρακτήρας" και *σημαίνει "οτιδήποτε πριν αυτό το σύμβολο επαναληφθεί πολλές φορές." Μαζί ( .*) σημαίνουν "οποιοδήποτε σύμβολο όσες φορές." Μπορείτε να το χρησιμοποιήσετε, για παράδειγμα, για να βρείτε αντιστοιχίες που ξεκινούν με ή τελειώνουν σε κάποιο κείμενο. Ας υποθέσουμε ότι έχουμε μια μέθοδο javascript με την ακόλουθη υπογραφή:

loadScript(scriptName: string, pathToFile: string)

Και θέλουμε να βρούμε όλες τις κλήσεις αυτής της μεθόδου όπου pathToFileοδηγεί σε οποιοδήποτε αρχείο στο φάκελο “lua”. Μπορείτε να χρησιμοποιήσετε την ακόλουθη Κανονική Έκφραση για αυτό:

loadScript.*lua

Που σημαίνει, "ταιριάξτε όλο το κείμενο ξεκινώντας με “loadScript”ακολουθούμενο από οτιδήποτε μέχρι την τελευταία εμφάνιση του “lua”"

3); - Μη άπληστος αγώνας

Το ?σύμβολο μετά .*και μερικές άλλες ακολουθίες RegEx σημαίνει "ταιριάζει όσο το δυνατόν λιγότερο." Αν κοιτάξετε την προηγούμενη εικόνα, θα δείτε ότι το κείμενο “lua”εμφανίζεται δύο φορές σε κάθε αγώνα, και όλα μέχρι το δεύτερο “lua”ταιριάζουν. Αν θέλετε να ταιριάξετε τα πάντα με την πρώτη εμφάνιση "lua"αντί, θα χρησιμοποιήσετε το ακόλουθο RegEx:

loadScript.*?lua

Που σημαίνει, "ταιριάξτε τα πάντα ξεκινώντας από "loadScript"ακολουθούμενο από οτιδήποτε μέχρι την πρώτη εμφάνιση του "lua""

4) () $ - Καταγραφή ομάδων και αναφορών

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

Ας υποθέσουμε ότι αλλάξαμε τη loadScriptμέθοδο μας και τώρα ξαφνικά χρειάζεται ένα άλλο επιχείρημα που παρεμβάλλεται ανάμεσα στα δύο επιχειρήματά του. Ας το όνομα του αυτό το νέο επιχείρημα id, έτσι ώστε η νέα λειτουργία υπογραφή θα πρέπει να μοιάζει κάπως έτσι: loadScript(scriptName, id, pathToFile). Δεν μπορούμε να χρησιμοποιήσουμε τη λειτουργία κανονικής αντικατάστασης του προγράμματος επεξεργασίας κειμένου εδώ, αλλά η Κανονική Έκφραση είναι ακριβώς αυτό που χρειαζόμαστε.

Πάνω μπορείτε να δείτε το αποτέλεσμα εκτέλεσης της ακόλουθης Κανονικής έκφρασης:

loadScript\(.*?,.*?\)

Που σημαίνει: "ταιριάξτε τα πάντα ξεκινώντας με "loadScript("οτιδήποτε μέχρι το πρώτο ,, στη συνέχεια ακολουθούμενο από οτιδήποτε μέχρι το πρώτο )"

Τα μόνα πράγματα που μπορεί να φαίνονται περίεργα εδώ για εσάς είναι τα \σύμβολα. Χρησιμοποιούνται για να ξεφύγουν από αγκύλες.

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

Στο προηγούμενο RegEx, ορίσαμε δύο ορίσματα της μεθόδου κλήσης με τα .*?σύμβολα. Ας κάνουμε καθένα από τα επιχειρήματά μας μια ξεχωριστή ομάδα σύλληψης προσθέτοντας (και )σύμβολα γύρω τους:

loadScript\((.*?),(.*?)\)

Εάν εκτελέσετε αυτό το RegEx, θα δείτε ότι τίποτα δεν άλλαξε. Αυτό συμβαίνει επειδή ταιριάζει με το ίδιο κείμενο. Αλλά τώρα μπορούμε να αναφερθούμε στο πρώτο επιχείρημα ως $1και στο δεύτερο επιχείρημα ως $2. Αυτό ονομάζεται backreference και θα μας βοηθήσει να κάνουμε ό, τι θέλουμε: προσθέστε ένα άλλο επιχείρημα στη μέση της κλήσης:

Εισαγωγή αναζήτησης:

loadScript\((.*?),(.*?)\)

Αυτό σημαίνει το ίδιο πράγμα με το προηγούμενο RegEx, αλλά χαρτογραφεί επιχειρήματα για τη σύλληψη ομάδων 1 και 2 αντίστοιχα.

Αντικατάσταση εισόδου:

loadScript($1,id,$2)

Αυτό σημαίνει "αντικαταστήστε κάθε αντιστοιχισμένο κείμενο με κείμενο που “loadScript(“ακολουθείται από την ομάδα σύλληψης 1, την “id”ομάδα σύλληψης 2 και )". Σημειώστε ότι δεν χρειάζεται να ξεφύγετε από αγκύλες στην είσοδο αντικατάστασης.

5) [] - Μαθήματα χαρακτήρων

Μπορείτε να παραθέσετε χαρακτήρες που θέλετε να ταιριάξετε σε μια συγκεκριμένη θέση τοποθετώντας [και ]σύμβολα γύρω από αυτούς τους χαρακτήρες. Για παράδειγμα, η τάξη [0-9]ταιριάζει με όλα τα ψηφία από το 0 έως το 9. Μπορείτε επίσης να απαριθμήσετε όλα τα ψηφία ρητά: [0123456789]- το νόημα είναι το ίδιο. Μπορείτε επίσης να χρησιμοποιήσετε παύλα με γράμματα, [a-z]θα ταιριάζει με οποιονδήποτε πεζά λατινικό χαρακτήρα, [A-Z]θα ταιριάζει με οποιονδήποτε κεφαλαίο λατινικό χαρακτήρα και [a-zA-Z]θα ταιριάζει και με τα δύο.

Μπορείτε επίσης να χρησιμοποιήσετε *μετά από μια κλάση χαρακτήρων όπως μετά ., κάτι που σε αυτήν την περίπτωση σημαίνει: "αντιστοιχίστε οποιονδήποτε αριθμό εμφανίσεων των χαρακτήρων σε αυτήν την τάξη"

Τελευταία λέξη

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

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

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