Δοκιμαστής Κανονικών Εκφράσεων
Εισαγάγετε ένα μοτίβο και κείμενο δοκιμής — οι αντιστοιχίσεις επισημαίνονται καθώς πληκτρολογείτε. Το μοτίβο και οι σημαίες συγχρονίζονται με το URL για διαμοιρασμό· το κείμενο δοκιμής σας ποτέ.
Αποτέλεσμα με επισήμανση
Αντιστοιχίσεις (0)
Δοκιμάστε κανονικές εκφράσεις JavaScript σε πραγματικό κείμενο
Αυτό το εργαλείο μεταγλωττίζει ένα εγγενές RegExp
από το μοτίβο και τις σημαίες σας, μέσα σε ένα try/catch ώστε ένα εσφαλμένο μοτίβο
να εμφανίζει ένα κατανοητό μήνυμα σφάλματος αντί για κενή
σελίδα. Μετά το τρέχει στο κείμενο δοκιμής σας ακριβώς όπως θα
το έτρεχε ο δικός σας κώδικας — matchAll() όταν η
σημαία global είναι επιλεγμένη, συγκεντρώνοντας κάθε
αντιστοίχιση, ή ένα μοναδικό match() όταν δεν
είναι. Κάθε αντιστοίχιση επισημαίνεται στη θέση της κόβοντας
την αρχική συμβολοσειρά γύρω από το match.index
και το match[0].length και τυλίγοντας εκείνο το
τμήμα σε ένα στοιχείο <mark> — ποτέ με
αναζήτηση-και-αντικατάσταση πάνω στη συμβολοσειρά, κάτι που
χαλάει μόλις το κείμενο δοκιμής σας περιέχει τους ίδιους
χαρακτήρες που αναζητάτε. Κάθε αντιστοίχιση απαριθμείται επίσης
παρακάτω με τη θέση της και το κείμενο που συνέλαβε κάθε ομάδα
σε παρένθεση.
Παράδειγμα
Μοτίβο: (\w+)@(\w+)\.com, σημαίες gu, έναντι "Επικοινωνήστε στο maria@example.com ή στο gianni@test.com για βοήθεια."
-
Αντιστοίχιση 1 στον δείκτη 18:
maria@example.com— Ομάδα 1:maria· Ομάδα 2:example -
Αντιστοίχιση 2 στον δείκτη 42:
gianni@test.com— Ομάδα 1:gianni· Ομάδα 2:test
Δύο αντιστοιχίσεις, επειδή η σημαία global είναι ενεργή —
αποεπιλέξτε την και το εργαλείο σταματά μετά την πρώτη,
«maria@example.com», όπως ακριβώς θα έκανε η String.prototype.match() χωρίς τη σημαία g.
Συχνές ερωτήσεις
Γιατί το μοτίβο μου δεν ταιριάζει σε πολλές γραμμές;
Δύο ξεχωριστές σημαίες της JavaScript επηρεάζουν το κείμενο πολλών γραμμών, και είναι εύκολο να χρησιμοποιήσετε τη λάθος. Η m (multiline) αλλάζει τι σημαίνουν τα ^ και $ — ενεργή, ταιριάζουν με την αρχή/τέλος κάθε γραμμής αντί μόνο με την αρχή/τέλος όλης της συμβολοσειράς. Η s (dotAll) αλλάζει με τι ταιριάζει η τελεία — ενεργή, το . ταιριάζει και με αλλαγές γραμμής, όχι μόνο με «οποιονδήποτε χαρακτήρα εκτός από αλλαγή γραμμής». Ένα μοτίβο που πρέπει να εκτείνεται σε γραμμές με .* συνήθως χρειάζεται το s· ένα μοτίβο που αγκυρώνει κάθε γραμμή με ^ ή $ συνήθως χρειάζεται το m. Είναι ανεξάρτητες, και κάποια μοτίβα χρειάζονται και τις δύο.
Τι κάνει ακριβώς κάθε σημαία;
Η g (global) επιστρέφει όλες τις αντιστοιχίσεις στη συμβολοσειρά αντί να σταματά στην πρώτη. Η i (ignoreCase) κάνει την αντιστοίχιση ανεξάρτητη πεζών/κεφαλαίων. Η m (multiline) κάνει τα ^ και $ να ταιριάζουν με τα όρια γραμμής, όχι μόνο με την αρχή και το τέλος της συμβολοσειράς. Η s (dotAll) κάνει το . να ταιριάζει και με αλλαγές γραμμής. Η u (unicode) αντιμετωπίζει το μοτίβο ως σημεία κώδικα Unicode αντί για ακατέργαστες μονάδες κώδικα 16 bit, κάτι που διορθώνει την αντιστοίχιση χαρακτήρων εκτός του Βασικού Πολυγλωσσικού Πεδίου — τα περισσότερα emoji, για παράδειγμα — και ενεργοποιεί escape ιδιοτήτων Unicode όπως \p{Letter}.
Είναι ακριβώς η ίδια σύνταξη regex που θα χρησιμοποιούσα σε Python, PHP ή grep;
Όχι — αυτό το εργαλείο δημιουργεί πραγματικό RegExp της JavaScript, οπότε συμπεριφέρεται ακριβώς όπως θα συμπεριφερόταν η JS, και το regex της JS είναι δική του διάλεκτος. Το PCRE (που χρησιμοποιεί η PHP, και στο οποίο βασίζονται πολλά άλλα εργαλεία) υποστηρίζει δομές που λείπουν από τη JS σε ορισμένες εκδόσεις μηχανής, όπως atomic groups και possessive quantifiers· η JavaScript από την πλευρά της έχει δικές της δυνατότητες, όπως ονομασμένες ομάδες σύλληψης με (?<name>...) και lookbehind, που παλαιότερες εκδόσεις PCRE δεν υποστηρίζουν. Αν το μοτίβο προορίζεται για άλλη γλώσσα ή εργαλείο, δοκιμάστε το και εκεί αντί να υποθέσετε ότι μια αντιστοίχιση εδώ ισχύει παντού.
Πώς διαβάζω τις ομάδες σύλληψης στα αποτελέσματα;
Κάθε ζεύγος παρενθέσεων στο μοτίβο σας συλλαμβάνει το κείμενο που ταίριαξε στο εσωτερικό του, αριθμημένο από αριστερά προς τα δεξιά ξεκινώντας από το 1 (η ομάδα 0, που δεν εμφανίζεται ξεχωριστά εδώ, είναι πάντα η πλήρης αντιστοίχιση). Για το (\w+)@(\w+)\.com έναντι του «maria@example.com», η ομάδα 1 συλλαμβάνει το «maria» και η ομάδα 2 το «example» — χρήσιμο για την εξαγωγή ονόματος χρήστη ή domain από μια μεγαλύτερη αντιστοίχιση χωρίς δεύτερο πέρασμα. Μια ομάδα που είναι μέρος του μοτίβου αλλά δεν συμμετείχε σε μια συγκεκριμένη αντιστοίχιση — μέσα σε μια εναλλαγή που ακολούθησε τον άλλο κλάδο, για παράδειγμα — εμφανίζεται ως χωρίς αντιστοίχιση αντί για κενή συμβολοσειρά, και αυτό το εργαλείο σημειώνει ρητά αυτή τη διαφορά.