Regex Tester για JavaScript

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

Τρέχει στον browser σαςΧωρίς εγγραφήΤίποτα δεν ανεβαίνει

Επισημασμένες αντιστοιχίες

    
$1, $<name>, $& (όλη η αντιστοιχία)
Λεπτομέρειες αντιστοιχιών
#ΘέσηΑντιστοιχίαΟμάδες
Σκονάκι regex
.Οποιοσδήποτε χαρακτήρας εκτός αλλαγής γραμμής (οποιοσδήποτε με s)
\d \w \sΨηφίο, χαρακτήρας λέξης, κενό
\D \W \SΌχι ψηφίο, όχι χαρακτήρας λέξης, όχι κενό
[abc] [^abc]Ένα από / κανένα από a, b, c
[a-z0-9]Εύρος χαρακτήρων
\p{L} \p{N}Γράμμα / αριθμός Unicode (απαιτεί u)
^ $Αρχή / τέλος εισόδου (γραμμής με m)
\b \BΌριο λέξης / όχι όριο
* + ?0 ή περισσότερα, 1 ή περισσότερα, 0 ή 1
{n} {n,} {n,m}Ακριβώς n, τουλάχιστον n, από n έως m
*? +? ??Lazy (όσο το δυνατόν λιγότερα)
a|ba ή b
(…)Ομάδα σύλληψης, αναφορά ως $1
(?<name>…)Ονομασμένη ομάδα, $<name>
(?:…)Ομάδα χωρίς σύλληψη
\1 \k<name>Οπισθοαναφορά
(?=…) (?!…)Lookahead / αρνητικό lookahead
(?<=…) (?<!…)Lookbehind / αρνητικό lookbehind
\. \* \\Χαρακτήρες με escape
\n \t \rΑλλαγή γραμμής, tab, επιστροφή φορέα
\uFFFFΜονάδα κώδικα Unicode
\u{1F600}Code point (απαιτεί u)
$&Όλη η αντιστοιχία σε αντικατάσταση
$` $'Κείμενο πριν / μετά την αντιστοιχία

Πώς να χρησιμοποιήσετε: Regex Tester

  1. Γράψτε το μοτίβο σας ανάμεσα στις καθέτους, χωρίς τα περιβάλλοντα /.
  2. Ενεργοποιήστε σημαίες όπως g (όλες οι αντιστοιχίες), i (χωρίς διάκριση πεζών-κεφαλαίων) και m (πολλές γραμμές).
  3. Επικολλήστε το κείμενο δοκιμής. Οι αντιστοιχίες επισημαίνονται δεξιά και εμφανίζονται από κάτω με τη θέση και τις ομάδες σύλληψής τους.
  4. Τσεκάρετε Αντικατάσταση και γράψτε μια αντικατάσταση όπως $1 ή $<name> για προεπισκόπηση του String.replace.
  5. Διαλέξτε ένα μοτίβο από τη Βιβλιοθήκη μοτίβων για να ξεκινήσετε από δοκιμασμένο regex για email, URL, IP ή ημερομηνία.

Κανονικές εκφράσεις JavaScript

Ο tester χρησιμοποιεί τη μηχανή RegExp του ίδιου του browser σας, οπότε τα αποτελέσματα είναι ακριβώς αυτά που επιστρέφουν τα String.match, matchAll, replace και RegExp.exec σε JavaScript και Node.js. Αυτό περιλαμβάνει σύγχρονη σύνταξη: ονομασμένες ομάδες (?<name>…), lookbehind (?<=…), Unicode property escapes όπως \p{L} με τη σημαία u και δείκτες αντιστοιχιών με τη σημαία d.

Τι κάνουν οι σημαίες

ΣημαίαΌνομαΑποτέλεσμα
gglobalΒρίσκει κάθε αντιστοιχία αντί να σταματά στην πρώτη.
iignoreCaseΤα γράμματα ταιριάζουν ανεξάρτητα από πεζά-κεφαλαία.
mmultilineΤα ^ και $ ταιριάζουν στην αρχή και στο τέλος κάθε γραμμής.
sdotAllΗ . ταιριάζει και σε αλλαγές γραμμής.
uunicodeΧειρίζεται το μοτίβο ως code points· ενεργοποιεί τα \p{…} και \u{…}.
ystickyΤαιριάζει μόνο στην τρέχουσα θέση lastIndex.
dhasIndicesΑναφέρει θέσεις αρχής και τέλους για κάθε ομάδα σύλληψης.

Προστασία από catastrophic backtracking

Μοτίβα με εμφωλευμένους ποσοδείκτες, όπως (a+)+$ ή (\w|\d)*x, μπορεί να χρειαστούν εκθετικό χρόνο σε εισόδους που σχεδόν ταιριάζουν. Σε μια κανονική ιστοσελίδα αυτό παγώνει την καρτέλα. Εδώ κάθε αντιστοίχιση τρέχει σε έναν Web Worker στο παρασκήνιο που σταματά μετά από ένα δευτερόλεπτο, και παίρνετε μια σαφή προειδοποίηση αντί για κολλημένο browser. Το ίδιο μοτίβο σε κώδικα παραγωγής μπορεί να είναι ευπάθεια ReDoS, οπότε αντιμετωπίστε την προειδοποίηση ως bug που πρέπει να διορθωθεί.

Συμβουλές για καλύτερα regex

  • Αγκυρώστε τα μοτίβα με ^ και $ όταν επικυρώνετε ολόκληρες τιμές, αλλιώς περνά μια αντιστοιχία οπουδήποτε μέσα στο string.
  • Προτιμήστε συγκεκριμένες κλάσεις όπως [^"]* αντί για .*· είναι ταχύτερες και αποφεύγουν τις υπερβολικές αντιστοιχίες.
  • Χρησιμοποιήστε ομάδες χωρίς σύλληψη (?:…) όταν δεν χρειάζεστε την τιμή που συλλαμβάνεται.
  • Δώστε ονόματα στις ομάδες σας. Το match.groups.year διαβάζεται πιο εύκολα από το match[1].

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

Ποια παραλλαγή regex χρησιμοποιεί ο tester;
JavaScript (ECMAScript), μέσω του ενσωματωμένου RegExp του browser σας. Το μεγαλύτερο μέρος της σύνταξης είναι κοινό με PCRE, Python και Java, αλλά χαρακτηριστικά όπως possessive quantifiers, atomic groups και inline modifiers όπως (?i) δεν υπάρχουν στη JavaScript.
Γιατί το μοτίβο μου βρίσκει μόνο μία αντιστοιχία;
Χωρίς τη σημαία g (global), η JavaScript σταματά μετά την πρώτη αντιστοιχία. Ενεργοποιήστε το g για να βρείτε κάθε εμφάνιση.
Πώς αναφέρομαι σε ομάδες στην αντικατάσταση;
Χρησιμοποιήστε $1, $2… για αριθμημένες ομάδες, $<name> για ονομασμένες ομάδες, $& για ολόκληρη την αντιστοιχία και $$ για ένα κυριολεκτικό σύμβολο δολαρίου.
Γιατί ο tester σταμάτησε με timeout;
Το μοτίβο χρειάστηκε πάνω από ένα δευτερόλεπτο για την είσοδό σας, κάτι που σχεδόν πάντα σημαίνει catastrophic backtracking. Ψάξτε για εμφωλευμένους ποσοδείκτες όπως (x+)+ ή επικαλυπτόμενες εναλλακτικές όπως (a|a)* και ξαναγράψτε τα ώστε κάθε χαρακτήρας να μπορεί να ταιριάξει μόνο με έναν τρόπο.
Αποστέλλονται κάπου τα δεδομένα δοκιμής μου;
Όχι. Η αντιστοίχιση τρέχει τοπικά σε έναν Web Worker μέσα στον browser σας. Το μοτίβο και το κείμενό σας αποθηκεύονται μόνο στον δικό σας browser, ώστε να είναι ακόμη εκεί όταν επιστρέψετε.

Σχετικά εργαλεία