Hjemmeside » Coding » Beginner's Guide to Regular Expression (Regex)

    Beginner's Guide to Regular Expression (Regex)

    Et vanlig uttrykk er et sett med tegn som danner et mønster som kan søges i en streng. Regex kan brukes til validering for eksempel å validere kredittkortnummer, for Søke dvs. via komplekse tekst-kamper, og for erstatter matchet tekst med en annen streng. Den har også god støtte for flere språk - lære den en gang, og du kan bruke den på mange programmeringsspråk.

    Jeg har sett få folk ta en første titt på regex, og ignorere det helt. Jeg klandrer dem ikke; regex syntaks er kompleks og vil gjøre mange cringe akkurat som de kommandolinjene, bare verre. Men så er hver ny ting skummelt og virker umulig å lære først. Så, låner Horatius 'ord, jeg sier dette; Begynn, vær modig, og vent til å være klok.

    Om Regex

    Regex hadde sine røtter i nevrovitenskap og matematikk og ble først implementert i programmering i 1968 av Ken Thompson i QED tekstredigeringsprogram for tekstsøk. Nå er det en del av mange programmeringsspråk som Perl, Java, Python, Ruby og JavaScript.

    La oss se på noen eksempler på hvordan regex fungerer.

    Jeg bruker JavaScript i eksemplene mine. Nå, for å passere nybegynnernivå, må du lære alt tegn, klasser, kvantifikatorer, modifikatorer og metoder brukt i regex. Her er en lenke til Mozilla Developer Networks Regular Expression-side hvor du kan se et bord som inneholder alle disse. Du kan også henvise til cheatsheet på slutten av dette innlegget med de mest brukte tegnene.

    La oss se et enkelt eksempel med en forklaring. Dette er en regex.

    Dette er hva ovennevnte regex vil se etter i en linje, et tegn 'B' etterfulgt av minst ett av tegn mellom (og inkludert) 'a' til 'z', 'A' til 'Z' og tallene 0 til 9.

    Her er et utvalg av kamper i en linje uthevet:

    Kurv, pære, B12 vitamin, BaSo4, N BC selskap

    Ovennevnte regex vil stoppe søket på Kurv og returnere en positiv respons. Det er fordi den globale modifikatoren 'g'må spesifiseres hvis du vil at regex skal se på alle mulige kamper.

    Nå, la oss se hvordan du bruker dette uttrykket i JavaScript. De test Metoden går: hvis det ble funnet en kampavkastning ekte, ellers falsk.

     var input = "din teststreng", regex = / B [a-zA-Z \ d] + /; hvis (! regex.test (input)) varsling ('Ingen match er funnet'); Ellers varsling ('En kamp er funnet');

    La oss prøve en annen metode: kamp returnerer kampene som finnes i en matrise.

     var input = "din teststreng", regex = / B [a-zA-Z \ d] + / g, / * Jeg har lagt den globale modifikatoren 'g' til regex for å få alle kampene * / ary = input.match (regex); hvis (ary === null) varsling ('Ingen match er funnet'); ellers varslet ('kamper er:' + ary.toString ());

    Hva med streng erstatte? La oss prøve det med regex nå.

     var input = "din teststreng", regex = / B [a-zA-Z \ d] + / g; varsling (input.replace (regex, "#"));

    Nedenfor er en kodepen for deg å finjustere. Klikk på "JavaScript" -fanen for å vise JS-koden.

    Øvelser

    For øvelser kan du google “regex øvelser” og prøv å løse dem. Her er hva du kan forvente når du prøver disse øvelsene, i henhold til vanskelighetsgrader.

    grunn~~POS=TRUNC

    For meg å kunne validere et passord er nok til å begynne med. Så bekreft et passord for 8 til 16 tegnlengde, alfanumerisk med ditt valg av spesialtegn tillatt.

    mellom~~POS=TRUNC

    Det er her du bør øve med mer virkelige verdensdata og lære noen flere regexpoeng som lookahead, lookbehind påstander og matchende grupper;

    • Bekreft PIN-koder, hexadecimaler, datoer, e-post-ID, flytpunkt.
    • Erstatt trailing null, hvite rom, et sett med matchende ord
    • Trekk ut forskjellige deler av en URL

    Avansert

    Du kan optimalisere de ovennevnte øvelsenees løsninger - den mest optimale regexen for e-post har tusenvis av tegn i det - så ta det så langt du føler deg komfortabel med, og det er nok. Du kan også prøve:

    • Parsing HTML eller XML (selv om det i den virkelige verden er motet til å gjøre det, fordi det å bruke vanlig uttrykk for å analysere ikke-vanlig språk som HTML, vil aldri gjøre det dumt. Plus XML-parsing er en vanskelig oppgave, mer egnet for brukere med avansert nivå)
    • Bytte ut koder
    • Fjerner kommentarer (unntatt IE betingede kommentarer)

    Verktøy

    Verktøy til visualisere regex er en av de kuleste ting der ute for meg. Hvis du noen gang kommer over en lang kompleks regex, kan du bare kopiere dem inn i et av disse verktøyene, og du vil kunne se strømmen tydelig. Dessuten er det mange verktøy du kan bruke til å lure med regex-koden. De viser også eksempler og cheatsheets sammen med delfunksjoner.

    • Debuggex - Den trekker et regexdiagram som per ditt innspill, og du kan gjøre en rask deling til StackOverflow derfra.
    • RegExr - Du kan teste din regex med denne. Det har også referanse, et cheatsheet og eksempler for å hjelpe deg.
    • Refiddle - For øyeblikket, unntatt JavaScript, kan du også lure med Ruby og .NET versjoner av regex i det.

    Regex Cheatsheet

    pollett Definisjon
    [Abc] Ethvert enkelt tegn a, b eller c
    [^ Abc] Enhver annen person enn a, b eller c
    [A-z] Karakter mellom (inkludert) a til z
    [^ A-z] Tegn unntatt fra a til z
    [A-Z] Karakter mellom (inkludert) A til Z
    . Ethvert enkelt tegn
    \ s En hvilken som helst whitespace karakter
    \ S Eventuelle ikke-hvite plasskarakterer
    \ d Et hvilket som helst tall fra 0 til 9
    \ D Enhver ikke-siffer
    \ w Ethvert ordkarakter (brev, tall og understrek)
    \ W Enhver ikke-ord karakter
    (...) Fang 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 tilstede flere ganger
    en+ Tegn a er til stede en eller flere ganger
    en 3 3 forekomster av karakter en etterfølgende
    en 3, 3 eller flere forekomster av karakter en etterfølgende
    a 3,6 3 til 6 forekomster av karakter en etterfølgende
    ^ Start av streng
    $ Slutten av strengen
    \ b Et ordgrense. Hvis et tegn er et ords siste eller første ordkarakter eller Hvis et tegn er mellom et ord eller et ikke-ordtegn
    \ B Ikke-ordgrense

    Nå Les: Vanlige uttrykk: 30 Nyttige verktøy og ressurser