UltKit
Εικόνα11
PDF13
Έγγραφα και δεδομένα7
Βίντεο6
Ήχος4
Περισσότερα εργαλεία22

Regex Tester: έλεγχος κανονικών εκφράσεων

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

Σημαίες

0 χαρακτήρες · 0 λέξεις · 0 γραμμές

Οι αντιστοιχίσεις επισημαίνονται εδώ.

0 χαρακτήρες · 0 λέξεις · 0 γραμμές

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

Στοιχεία regex της JavaScript

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

TokenΣημασίαΜοτίβοΚείμενοΠρώτη αντιστοίχιση
\dΨηφίο 0–9/\d+/Order 66 shipped66
\wΓράμμα, ψηφίο ή κάτω παύλα (ASCII)/\w+/snake_case-idsnake_case
\sΚενό διάστημα, συμπεριλαμβανομένων tab και αλλαγών γραμμής/\s+/two spaces
.Οποιοσδήποτε χαρακτήρας εκτός από αλλαγή γραμμής (εκτός αν s)/a.c/abc a-cabc
^ $Αρχή και τέλος εισόδου (ή γραμμής, με m)/^\w+$/singlesingle
[abc]Ένας από τους χαρακτήρες της λίστας/[aeiou]/rhythm and bluesa
[^abc]Οποιοσδήποτε χαρακτήρας εκτός λίστας/[^0-9]+/2026-10-18-
* + ?0 ή περισσότερα, 1 ή περισσότερα, 0 ή 1/colou?r/color colourcolor
{n,m}Από n έως m φορές/\d{2,4}/7 42 1999 12345642
(…)Ομάδα καταγραφής/(\d+)px/width: 320px320px
(?<name>…)Ονοματισμένη ομάδα καταγραφής/(?<h>\d\d):(?<m>\d\d)/at 09:4509:45
(?:…)Ομάδα χωρίς καταγραφή/(?:ab)+/ababab!ababab
a|bΌποια από τις δύο πλευρές/cat|dog/hotdogdog
\bΌριο λέξης/\bcat\b/concat catcat
(?=…)Ακολουθείται από (lookahead)/\d+(?=%)/50 of 75%75
(?<!…)Δεν προηγείται (negative lookbehind)/(?<!\$)\b\d+/$30 or 4040
\p{L}Οποιοδήποτε γράμμα Unicode (απαιτεί u)/\p{L}+/unaïve 東京naïve

Οι έξι σημαίες και τι αλλάζει η καθεμία

Το g (global) βρίσκει όλες τις αντιστοιχίσεις αντί να σταματά στην πρώτη· χωρίς αυτό η λίστα έχει μία εγγραφή. Το i αγνοεί την διάκριση πεζών-κεφαλαίων. Το m (multiline) κάνει τα ^ και $ να αντιστοιχούν στην αρχή και στο τέλος κάθε γραμμής και όχι μόνο ολόκληρου του κειμένου, κάτι που χρειάζεστε για ένα μοτίβο όπως τα κενά στο τέλος της γραμμής. Το s (dotAll, προστέθηκε στο ES2018) επιτρέπει στο . να αντιστοιχεί και σε αλλαγές γραμμής. Το u (unicode) αντιμετωπίζει το κείμενο ως code points, οπότε ένα emoji μετράει ως ένας χαρακτήρας, και ενεργοποιεί τις ακολουθίες ιδιοτήτων όπως το \p{L} για οποιοδήποτε γράμμα σε οποιοδήποτε αλφάβητο. Το y (sticky) αντιστοιχεί μόνο ακριβώς στην τρέχουσα θέση, τη λειτουργία που χρησιμοποιούν οι tokenizers. Η JavaScript έχει επίσης το d για δείκτες αντιστοίχισης και το v για πράξεις συνόλων σε κλάσεις· αυτός ο έλεγχος περιορίζεται στα έξι παραπάνω.

Κάτω από το κείμενο δοκιμής, κάθε αντιστοίχιση εμφανίζει τον δείκτη και τις ομάδες της. Οι αριθμημένες ομάδες προκύπτουν από απλές παρενθέσεις, οι ομάδες (?:…) δεν καταγράφουν, και το (?<year>\d{4}) δημιουργεί ονομασμένη ομάδα που εμφανίζεται με το όνομά της, όπως δείχνει το δείγμα ημερομηνίας ISO. Το μενού Common patterns εισάγει δοκιμασμένα σημεία εκκίνησης για διευθύνσεις email, URL, διευθύνσεις IPv4, χρώματα hex, UUID, επαναλαμβανόμενες λέξεις και κενά στο τέλος γραμμής. Αντιμετωπίστε το μοτίβο email ως γρήγορο έλεγχο και όχι ως επικύρωση: η πλήρης γραμματική των διευθύνσεων είναι πολύ πιο ανεκτική και ο μόνος πραγματικός έλεγχος είναι η αποστολή ενός μηνύματος.

Lookbehind και καταστροφική οπισθοδρόμηση (backtracking)

Τα lookarounds ελέγχουν τι περιβάλλει μια θέση χωρίς να την καταναλώνουν. Το lookahead, (?=…) και (?!…), υπάρχει πάντα στην JavaScript· το lookbehind, (?<=…) και (?<!…), ήρθε με το ES2018 και έφτασε σε όλους τους μεγάλους browsers όταν το Safari 16.4 το υποστήριξε το 2023. Έτσι το (?<=\$)\d+ βρίσκει το 42 στο "$42" χωρίς να συμπεριλάβει το σύμβολο του δολαρίου. Σε αντίθεση με πολλές άλλες μηχανές, η JavaScript επιτρέπει lookbehind οποιουδήποτε μήκους.

Η μηχανή της JavaScript χρησιμοποιεί backtracking: όταν μια διαδρομή αποτυγχάνει, γυρίζει πίσω και δοκιμάζει τις εναλλακτικές. Οι ένθετοι ποσοδείκτες, όπως το (a+)+$, της δίνουν εκθετικό αριθμό τρόπων να χωρίσει το ίδιο κείμενο, οπότε μια συμβολοσειρά με 30 a ακολουθούμενα από x μπορεί να πάρει δευτερόλεπτα και λίγα ακόμη γράμματα ώρες. Αυτό είναι το catastrophic backtracking, και στους διακομιστές γίνεται ReDoS, άρνηση υπηρεσίας· ένας μόνο κανόνας WAF με αυτό το ελάττωμα έριξε το δίκτυο της Cloudflare για περίπου μισή ώρα στις 2 Ιουλίου 2019. Επειδή αυτός ο έλεγχος τρέχει στην καρτέλα σας, ένα τέτοιο μοτίβο μπορεί να παγώσει τη σελίδα· ανανεώστε και ξαναγράψτε το ώστε δύο ποσοδείκτες να μην διεκδικούν τους ίδιους χαρακτήρες, χρησιμοποιώντας πιο στενές κλάσεις όπως το [^,]* αντί για .*, ή άγκυρες. Για επεξεργασία του ίδιου του κειμένου και όχι αντιστοίχιση, δείτε τα εργαλεία κειμένου· περισσότερα εργαλεία για προγραμματιστές θα βρείτε στο κέντρο εργαλείων για προγραμματιστές.

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

Γιατί η κανονική έκφραση βρίσκει μόνο ένα αποτέλεσμα;
Το flag g είναι απενεργοποιημένο. Χωρίς αυτό, η μηχανή σταματά μετά την πρώτη αντιστοίχιση. Ενεργοποιήστε το g για να εμφανιστούν όλες οι εμφανίσεις· το flag y μόνο του βρίσκει επίσης πολλές, αλλά μόνο όταν ακολουθούν η μία την άλλη αμέσως.
Ταιριάζει το \d με ψηφία άλλων συστημάτων γραφής στη JavaScript;
Όχι. Στην JavaScript το \d σημαίνει μόνο 0 έως 9 και το \w μόνο γράμματα ASCII, ψηφία και κάτω παύλα, ακόμη και με το flag u. Χρησιμοποιήστε \p{Nd} ή \p{L} με το u για άλλα αλφάβητα.
Θα συμπεριφέρεται ένα μοτίβο που δοκιμάστηκε εδώ το ίδιο σε Python ή PHP;
Η βασική σύνταξη μεταφέρεται, αλλά οι λεπτομέρειες διαφέρουν: οι ονομασμένες ομάδες της Python γράφονται (?P<name>…), η PHP και η Python υποστηρίζουν possessive ποσοδείκτες που λείπουν από την JavaScript, και οι κανόνες του lookbehind διαφέρουν. Ελέγξτε ξανά στη μηχανή-στόχο.
Πώς ταιριάζω μια κυριολεκτική τελεία ή αγκύλη;
Βάλτε μπροστά μια ανάστροφη κάθετο: το \. αντιστοιχεί σε τελεία και το \[ σε αριστερή αγκύλη. Μέσα σε κλάση χαρακτήρων τα περισσότερα σύμβολα είναι ήδη κυριολεκτικά, οπότε και το [.] αντιστοιχεί μόνο σε τελεία.
Γιατί πάγωσε η σελίδα ενώ πληκτρολογούσα ένα μοτίβο;
Το μοτίβο πιθανότατα προκάλεσε catastrophic backtracking στο κείμενό σας. Ανανεώστε τη σελίδα και αποφύγετε ένθετους ποσοδείκτες όπως (.*)* ή (a+)+, και κάντε κάθε τμήμα να αντιστοιχεί όσο το δυνατόν λιγότερο.