Beginners Guide til Regular Expression (Regex)
Et regulært udtryk er et sæt tegn, der danner et mønster, der kan søges i en streng. Regex kan bruges til validering for eksempel at validere kreditkortnumre for Søg dvs. via komplekse tekstkampe og for erstatter matchet tekst med en anden streng. Det har også stor understøttelse af flere sprog - lær det en gang, og du kan bruge det på tværs af mange programmeringssprog.
Jeg har set få mennesker tage et første kig på regex, og ignorere det helt. Jeg bebrejder dem ikke; regex syntax er kompleks og vil gøre mange cringe ligesom de kommandolinjesprog, kun værre. Men så er hver ny ting skræmmende og synes umulig at lære først. Så jeg låner Horatius ord, jeg siger dette; Begynd, vær modig og våg at være klog.
Om Regex
Regex havde sine rødder i neurovidenskab og matematik og blev kun implementeret i programmeringen i 1968 af Ken Thompson i QED tekst editor til tekst søgning. Nu er det en del af mange programmeringssprog som Perl, Java, Python, Ruby og JavaScript.
Lad os se på nogle eksempler på hvordan regex fungerer.
Jeg bruger JavaScript i mine eksempler. Nu, for at komme videre til begynderniveau, skal du lære alt tegn, klasser, kvantifikatorer, modifikatorer og metoder bruges i regex. Her er et link til Mozilla Developer Network's Regular Expression-side, hvor du kan se et bord med alle dem. Du kan også henvise til cheatsheet i slutningen af dette indlæg med mest brugte tegn.
Lad os se et simpelt eksempel med en forklaring. Dette er en regex.
Dette er hvad ovennævnte regex vil søge efter i en linje, et tegn 'B' efterfulgt af mindst et tegn mellem (og inklusive) 'a' til 'z', 'A' til 'Z' og tallene 0 til 9.
Her er et eksempel på kampe i en linje fremhævet:
Kurv, pære, B12 vitamin, BaSO4, N BC Selskab
Ovenstående regex stopper søgningen på Kurv og returnere et positivt svar. Det er fordi den globale modifikator 'g
'skal specificeres hvis du vil have regex at se på alle mulige kampe.
Lad os nu se, hvordan du bruger dette udtryk i JavaScript. Det prøve
metode går: hvis fundet en match returnering rigtigt
, andet falsk
.
var input = "din teststreng", regex = / B [a-zA-Z \ d] + /; hvis (! regex.test (input)) alarm ('Ingen match er fundet'); Ellers advarsel ('En match er fundet');
Lad os prøve en anden metode: match
returnerer de matches, der findes i en matrix.
var input = "din teststreng", regex = / B [a-zA-Z \ d] + / g, / * Jeg har tilføjet den globale modifikator 'g' til regex for at få alle kampene * / ary = input.match (regex); hvis (ary === null) alert ('Ingen match er fundet'); ellers varslet ('matches er:' + ary.toString ());
Hvad med streng erstatte
? Lad os prøve det med regex nu.
var input = "din teststreng", regex = / B [a-zA-Z \ d] + / g; advarsel (input.replace (regex, "#"));
Nedenfor er en codepen for dig at tweak. Klik på fanen "JavaScript" for at få vist JS-koden.
Øvelser
Til øvelser kan du google “regex øvelser” og prøv at løse dem. Her er hvad man kan forvente, når man prøver disse øvelser, ifølge sværhedsgrader.
Grundlæggende
For mig at kunne validere et kodeord er nok til at begynde med. Så validér et kodeord for 8 til 16 tegnlængde, alfanumerisk med dit valg af specialtegn tilladt.
Intermediate
Det er her du skal øve med mere virkelige verdensdata og lære få flere regex point som lookahead, lookbehind påstande og matchende grupper;
- Validér PIN-koder, hexadecimaler, datoer, e-mail-ID, flydepunkt.
- Udskift efterfølgende nul, hvide rum, et sæt matchende ord
- Uddrag forskellige dele af en URL
Fremskreden
Du kan optimere ovenstående øvelser 'løsninger - den mest optimale regex for email har tusindvis af tegn i det - så tag det så langt som du har det godt med, og det er nok. Du kan også prøve:
- Parsing HTML eller XML (selvom det er i den virkelige verden, er det modløs til at gøre det, fordi brugen af regelmæssigt udtryk for at analysere ikke-regulært sprog som HTML, vil aldrig gøre det tåbeligt. Plus XML-parsing er en vanskelig opgave, mere egnet til avancerede brugere)
- Udskiftning af tags
- Fjernelse af kommentarer (undtagen IE betingede kommentarer)
Værktøj
Værktøjer til visualisere regex er en af de fedeste ting derude for mig. Hvis du nogensinde kommer på tværs af en lang kompleks regex, skal du blot kopiere dem ind i et af disse værktøjer, og du kan se strømmen tydeligt. Derudover er der mange værktøjer, som du kan bruge til at fyre med regex-koden. De viser også eksempler og cheatsheets sammen med del funktioner.
- Debuggex - Den trækker et regex diagram som pr. Input, og du kan hurtigt dele det med StackOverflow lige derfra.
- RegExr - Du kan teste din regex med denne. Det fik også reference, et cheatsheet og eksempler til at hjælpe dig ud.
- Forfalskning - For øjeblikket, undtagen JavaScript, kan du også fyre med Ruby og .NET versioner af regex i det.
Regex Cheatsheet
Polet | Definition |
[Abc] | Enhver enkelt tegn a, b eller c |
[^ Abc] | Ethvert andet tegn end a, b eller c |
[A-z] | Tegn mellem (herunder) a til z |
[^ A-z] | Tegn undtagen fra a til z |
[A-Z] | Tegn mellem (herunder) A til Z |
. | Enhver enkelt karakter |
\ s | En hvilken som helst whitespace karakter |
\ S | Enhver ikke-hvide plads karakter |
\ d | Et hvilket som helst ciffer 0 til 9 |
\ D | Enhver ikke-ciffer |
\ w | Ethvert ord tegn (bogstav, tal og understregning) |
\ W | Enhver ikke-ord karakter |
(...) | Capture alt vedlagt |
(A | b) | Match enten a eller b |
-en? | Tegn a er enten fraværende eller til stede en gang |
en* | Tegn a er enten fraværende eller til stede flere gange |
-en+ | Tegn a er til stede en eller flere gange |
en 3 | 3 forekomster af karakter en efterfølgende |
en 3, | 3 eller flere forekomster af karakter en efterfølgende |
en 3,6 | 3 til 6 forekomster af karakter en efterfølgende |
^ | Start af streng |
$ | Slut på streng |
\ b | Et ord grænsen. Hvis et tegn er et ords sidste eller første ordtegn eller Hvis et tegn er mellem et ord eller et ikke-ordtegn |
\ B | Ikke-ordet grænse |