Skip to content

Reguliariųjų išraiškų testeris

Testuokite ir derinkite JavaScript reguliariuosius reiškinius su tiesioginiu paryškinimu, grupėmis ir žingsnis po žingsnio paaiškinimu.

Regex testeris

Atnaujinama, kol rašote
Šablonas
Reguliarusis reiškinys ? /…/
/
/ g
Vėliavos g
Nustatymai ?
Testo įvestis
Testuojama eilutė ?
Išvestis
Paryškinta

        
Atitikmenų sąrašas

Kaip veikia reguliarieji reiškiniai

Reguliarusis reiškinys yra maža šablonų kalba tekstui aprašyti. Ši priemonė naudoja JavaScript variklį (įtaisytą į Jūsų naršyklę), todėl kiekvienas čia įvestas šablonas elgiasi lygiai taip pat kaip new RegExp(…) .js faile.

  1. Kompiliavimas. Variklis suanalizuoja Jūsų šabloną į vidinį būsenų automatą. Čia išlenda sintaksės klaidos — tai „Netinkamas regex“ laukas.
  2. Skenavimas. Variklis eina per testuojamą tekstą iš kairės į dešinę, kiekvienoje pozicijoje bandydamas šabloną.
  3. Atitikmuo arba grįžimas atgal. Kai žetonas nepavyksta, variklis grįžta atgal ir bando kitą šaką (alternatyvas |, godžius vs. tingius kvantifikatorius, neprivalomas grupes).
  4. Rinkimas. Su g vėliava tęsia po kiekvieno atitikmens; be g sustoja ties pirmu radimu.

JavaScript vs. PCRE (PHP / Python)

Jei rašėte regex kitose kalbose, keli dalykai skiriasi:

  • Vėliavų raidės panašios: g i m s u. JS taip pat turi y (sticky) ir d (hasIndices). PCRE prideda x (išplėstinį), kurio JavaScript nepalaiko.
  • Apžvalgos atgal (?<=…) ir (?<!…) veikia šiuolaikiniuose JS varikliuose, bet senesniuose tik fiksuoto pločio.
  • Savininkai kvantifikatoriai a++, a*+ ir atominės grupės (?>…) JavaScript neegzistuoja.
  • Rekursija (?R) ir paprogramės iškvietimai (?1) — tik PCRE.
  • Unicode savybių ekranavimams \p{Letter} JS reikia u vėliavos.

Dažniausios klaidos

  • Pagal numatymą — godus. .* griebia kuo daugiau. Kad atitiktų trumpiausią dalį, naudokite tingų .*?.
  • Katastrofinis grįžimas atgal. Įdėti kvantifikatoriai kaip (a+)+$ gali užšaldyti naršyklę esant patologiniam įvedimui. Rinkitės greitai nepavykstančius šablonus — pvz., \w+@\w+ vietoj (\w+)+@\w+.
  • Inkarams reikia tinkamos vėliavos. ^ ir $ pagal numatymą atitinka visos eilutės pradžią/pabaigą. Pridėkite m vėliavą, kad atitiktų kiekvieną eilutę.
  • Taškas sustoja ties nauja eilute. Naudokite s vėliavą, kai reikia, kad . peržengtų eilučių lūžius.
  • Simbolių klasėse ekranuokite atsargiai. […] viduje metasimboliai yra tik ] \ ^ -. Visa kita — literalas; . ar * ekranuoti nereikia.
  • Global + exec() realiame kode: RegExp.lastIndex turi būseną. Jei iteruojate atitikmenis JS, naudokite String.matchAll() arba nustatykite lastIndex iš naujo.

Spręsti pavyzdžiai

El. paštas (supaprastintas)/(\w+)@(\w+\.\w+)/g

Atitinka žodžio simbolių bloką, @, tada žodis.taškas.žodis. Dvi grupės leidžia išgauti lokalią dalį ir domeną. Realūs el. paštai sudėtingesni — RFC 5322 gramatika gerokai klaikesnė — bet šito pakanka žurnalų nagrinėjimui ir formos patarimams.

ISO data/\b(\d{4})-(\d{2})-(\d{2})\b/g

Trys fiksuoto pločio skaitmenų grupės, atskirtos brūkšneliais, įsprausto tarp žodžių ribų, kad neatitiktų viduryje eilutės. Griežtam validavimui dar apribotumėte mėnesius 0[1-9]|1[0-2].

IPv4/\b(?:\d{1,3}\.){3}\d{1,3}\b/g

Negriebianti grupė (?:…) kartojama tris kartus plius galutinis oktetas. Tai atitinka tik formą — 999.999.999.999 praeina. Griežtam validavimui kiekvienas oktetas tampa 25[0-5]|2[0-4]\d|[01]?\d\d?.

Išgauti ir performatuoti/(\d{4})-(\d{2})-(\d{2})/ → $3/$2/$1

Keitimo skirtuke tai paverčia kiekvieną 2024-07-04 į 04/07/2024. $1, $2, $3 yra atgalinės nuorodos į grupes.

Pašalinti HTML žymas/<[^>]+>/g

[^>]+ reiškia „vienas ar daugiau simbolių, kurie nėra >“. Greičiau ir saugiau už godų .*, nes simbolių klasė negali grįžti atgal per žymos ribas. Vis tiek ne tikras HTML analizatorius — rimtam darbui naudokite DOM analizatorių.

Kada nenaudoti regex

  • HTML, XML, JSON. Naudokite analizatorių. Regex negali subalansuoti įdėtų struktūrų.
  • El. pašto RFC atitikimas. Pilna gramatika — ~6 KB. Naudokite specializuotą biblioteką arba paprastą „yra @ ir taškas po jo“ patikrą plius patvirtinimo laišką.
  • Datos su kalendoriaus taisyklėmis. Regex gali atitikti formą, bet ne keliamuosius metus.
  • Natūralios kalbos analizė. Beveik visada ne tas įrankis — griebkite tokenizatorių arba LLM.