Χωρίς μεταφόρτωση, 100% τοπικά, χωρίς λογαριασμό

Οδηγός

Πώς να δοκιμάσετε ένα regex χωρίς να εγκαταστήσετε τίποτα

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

Βήμα προς βήμα

  1. Ανοίξτε τον δοκιμαστή regex και πληκτρολογήστε το μοτίβο σας στο πεδίο ανάμεσα στις δύο καθέτους. Δεν γράφετε εσείς τις καθέτους: το εργαλείο τις δείχνει ώστε να βλέπετε το μοτίβο όπως το διαβάζει μια μηχανή. Επικολλήστε το δείγμα κειμένου σας στο πλαίσιο από κάτω, για παράδειγμα μερικές γραμμές καταγραφής, μια λίστα διευθύνσεων email ή ένα κομμάτι κώδικα που θέλετε να αναζητήσετε.
    Ένα μοτίβο regex και μια συμβολοσειρά σημαιών εισαγμένα στον δοκιμαστή, με δείγμα κειμένου επικολλημένο στο πλαίσιο από κάτω
  2. Ορίστε τις σημαίες στο μικρό πλαίσιο δίπλα στο μοτίβο. Η σημαία g βρίσκει κάθε ταίριασμα αντί να σταματά στο πρώτο, η i κάνει το ταίριασμα ανεξάρτητο από πεζά κεφαλαία, η m επιτρέπει στις άγκυρες ^ και $ να ταιριάζουν την αρχή και το τέλος κάθε γραμμής αντί για όλο το κείμενο, η s επιτρέπει στην τελεία να ταιριάζει και τις αλλαγές γραμμής. Συνδυάστε τις ελεύθερα, για παράδειγμα gim.
  3. Πατήστε Δοκιμή. Κάθε ταίριασμα επισημαίνεται απευθείας μέσα στο κείμενό σας, και η λίστα από κάτω δείχνει κάθε ταίριασμα με τη θέση του και την τιμή κάθε ομάδας σύλληψης. Πειραματιστείτε με το μοτίβο και τρέξτε το ξανά: η προεπισκόπηση ενημερώνεται ώστε να στενεύετε το μοτίβο μέχρι να πιάνει ακριβώς αυτό που εννοούσατε και τίποτα άλλο.
    Το αποτέλεσμα της δοκιμής: ταιριάσματα επισημασμένα ενσωματωμένα και μια λίστα που δείχνει τη θέση κάθε ταιριάσματος και τις ομάδες σύλληψής του

Ομάδες σύλληψης, επώνυμες και αριθμημένες

Μια ομάδα σύλληψης είναι το μέρος του μοτίβου σας που περικλείεται σε παρενθέσεις, και είναι ο τρόπος με τον οποίο τραβάτε ένα κομμάτι από κάθε ταίριασμα αντί απλώς να επιβεβαιώνετε ότι ταίριαξε όλο. Οι αριθμημένες ομάδες μετριούνται από αριστερά προς τα δεξιά κατά την ανοιχτή παρένθεσή τους: στο (\d{4})-(\d{2})-(\d{2}) η ομάδα 1 είναι το έτος, η ομάδα 2 ο μήνας, η ομάδα 3 η ημέρα. Οι επώνυμες ομάδες χρησιμοποιούν τη σύνταξη (?<name>...), οπότε το (?<year>\d{4}) διαβάζεται πολύ καλύτερα από έναν γυμνό αριθμό όταν το μοτίβο μεγαλώνει. Αν θέλετε απλώς να ομαδοποιήσετε χωρίς σύλληψη, για παράδειγμα για να εφαρμόσετε έναν ποσοδείκτη σε αρκετούς χαρακτήρες, χρησιμοποιήστε μια ομάδα χωρίς σύλληψη (?:...) ώστε να μην παραγεμίζει τη λίστα αποτελεσμάτων σας. Ο δοκιμαστής δείχνει την τιμή κάθε ομάδας για κάθε ταίριασμα, που είναι ο γρηγορότερος τρόπος να επιβεβαιώσετε ότι εξάγετε τη σωστή φέτα.

Όταν ένα μοτίβο κολλάει ή συμπεριφέρεται άσχημα

Δύο προβλήματα εμφανίζονται ξανά και ξανά. Το πρώτο είναι η καταστροφική οπισθοδρόμηση: ένα μοτίβο όπως το (a+)+$ που τρέχει πάνω σε μια μακριά συμβολοσειρά που δεν ταιριάζει μπορεί να κάνει τη μηχανή να δοκιμάσει εκθετικό πλήθος διαδρομών και να παγώσει. Ο δοκιμαστής τρέχει κάθε δοκιμή σε ένα Web Worker με έναν σύντομο επιτηρητή, οπότε αντί για μια κολλημένη καρτέλα παίρνετε ένα σαφές μήνυμα και μπορείτε να απλοποιήσετε το μοτίβο, συνήθως κάνοντας έναν ποσοδείκτη κτητικό στο πνεύμα, αγκυρώνοντάς τον ή αποφεύγοντας τη φωλιασμένη επανάληψη. Το δεύτερο είναι το άπληστο έναντι του οκνηρού ταιριάσματος: από προεπιλογή το .* αρπάζει όσο περισσότερο μπορεί, οπότε για να ταιριάξετε το περιεχόμενο μιας μεμονωμένης ετικέτας HTML θέλετε την οκνηρή μορφή .*? αντί γι αυτό. Αν συγκρίνετε δύο ελαφρώς διαφορετικές εκδοχές μιας συμβολοσειράς για να δείτε τι πρέπει να στοχεύει το μοτίβο σας, το εργαλείο διαφορών κειμένου τις παρατάσσει ώστε η διαφορά να είναι προφανής προτού γράψετε την έκφραση.

Πώς το πρόγραμμα περιήγησης αξιολογεί το regex σας

Τα σύγχρονα προγράμματα περιήγησης διαθέτουν μια ενσωματωμένη μηχανή regex ECMAScript που υποστηρίζει το πλήρες σύνολο σημαιών: αντιστοίχιση χωρίς διάκριση πεζών-κεφαλαίων (i), λειτουργία multiline (m), dotAll (s), Unicode (u) και τη σημαία sticky (y). Όταν πληκτρολογείτε ένα μοτίβο στον tester, η μηχανή το μεταγλωττίζει σε ένα εσωτερικό NFA και το αξιολογεί έναντι της συμβολοσειράς δοκιμής σας σε πραγματικό χρόνο, αναφέροντας κάθε θέση αντιστοίχισης και κάθε capture group. Το backtracking συμβαίνει τοπικά στη CPU σας: ένα μοτίβο όπως (a+)+ σε μια μεγάλη συμβολοσειρά χωρίς αντιστοίχιση μπορεί να τρέχει για δευτερόλεπτα, και το να βλέπετε αυτό το κόλλημα στο πρόγραμμα περιήγησης είναι χρήσιμη ανατροφοδότηση πριν αναπτύξετε το μοτίβο σε κώδικα παραγωγής. Κανένα κείμενο δεν φεύγει από τη σελίδα, οπότε μπορείτε να επικολλήσετε δείγματα log ή οποιαδήποτε είσοδο χωρίς να τη δρομολογήσετε μέσω διακομιστή τρίτου.

Τα εργαλεία που χρησιμοποιούνται σε αυτόν τον οδηγό

Συχνές ερωτήσεις

Στέλνεται το μοτίβο ή το δοκιμαστικό κείμενό μου σε κάποιον διακομιστή;

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

Ποια ποικιλία regex χρησιμοποιεί ο δοκιμαστής;

Χρησιμοποιεί τη μηχανή κανονικών εκφράσεων JavaScript που είναι ενσωματωμένη στον περιηγητή σας, την ίδια που τρέχει στο Node.js και σε οποιαδήποτε ιστοσελίδα. Αυτή καλύπτει την κοινή σύνταξη: κλάσεις χαρακτήρων, ποσοδείκτες, άγκυρες, εναλλαγή, αριθμημένες και επώνυμες ομάδες σύλληψης, πρόσω και πίσω αναζήτηση. Μερικά χαρακτηριστικά από άλλες ποικιλίες, όπως η αναδρομή τύπου Perl ή οι κτητικοί ποσοδείκτες, δεν αποτελούν μέρος της μηχανής JavaScript, οπότε αν ένα μοτίβο που αντιγράψατε από ένα έργο PHP ή Python συμπεριφέρεται διαφορετικά, αυτή η διαφορά ποικιλίας είναι συνήθως ο λόγος.

Πηγές