Näin käytät työkalua: Regex-testaaja
- Syötä lauseke vinoviivojen väliin ilman ympäröiviä
/-merkkejä. - Kytke lippuja, kuten
g (kaikki osumat), i (ohita kirjainkoko) ja m (monirivinen). - Liitä testiteksti. Osumat korostetaan oikealla ja listataan alla indeksin ja kaappausryhmien kera.
- Valitse Korvaa ja syötä korvaus kuten
$1 tai $<name> esikatsellaksesi String.replace-kutsua. - Valitse lauseke Lausekekirjastosta aloittaaksesi testatusta sähköposti-, URL-, IP- tai päivämäärä-regexistä.
JavaScriptin säännölliset lausekkeet
Tämä testaaja käyttää selaimesi omaa RegExp-moottoria, joten tulokset ovat täsmälleen samat kuin String.match, matchAll, replace ja RegExp.exec palauttavat JavaScriptissä ja Node.js:ssä. Tämä kattaa myös modernin syntaksin: nimetyt ryhmät (?<name>…), lookbehindin (?<=…), Unicode-ominaisuusluokat kuten \p{L} u-lipulla sekä osumaindeksit d-lipulla.
Mitä liput tekevät
| Lippu | Nimi | Vaikutus |
g | global | Etsii jokaisen osuman sen sijaan, että pysähtyisi ensimmäiseen. |
i | ignoreCase | Kirjaimet täsmäävät kirjainkoosta riippumatta. |
m | multiline | ^ ja $ osuvat jokaisen rivin alkuun ja loppuun. |
s | dotAll | . osuu myös rivinvaihtoihin. |
u | unicode | Käsittelee lausekkeen koodipisteinä; ottaa käyttöön \p{…} ja \u{…}. |
y | sticky | Etsii osumaa vain nykyisestä lastIndex-kohdasta. |
d | hasIndices | Ilmoittaa jokaisen kaappausryhmän alku- ja loppukohdat. |
Suojaus katastrofaaliselta paluuhaulta
Lausekkeet, joissa on sisäkkäisiä kvanttoreita, kuten (a+)+$ tai (\w|\d)*x, voivat viedä eksponentiaalisesti aikaa syötteillä, jotka melkein täsmäävät. Tavallisella verkkosivulla tämä jäädyttää välilehden. Täällä jokainen haku ajetaan taustalla Web Workerissa, joka pysäytetään sekunnin jälkeen, ja saat selkeän varoituksen jumittuneen selaimen sijaan. Sama lauseke tuotantokoodissa voi olla ReDoS-haavoittuvuus, joten käsittele varoitusta korjattavana bugina.
Vinkkejä parempiin regexeihin
- Ankkuroi lausekkeet merkeillä
^ ja $, kun validoit kokonaisia arvoja, muuten osuma missä tahansa kohtaa merkkijonoa hyväksytään.
- Suosi tarkkoja luokkia, kuten
[^"]*, lausekkeen .* sijaan; ne ovat nopeampia ja välttävät liian laajat osumat.
- Käytä ei-kaappaavia ryhmiä
(?:…), kun et tarvitse kaapattua arvoa.
- Nimeä ryhmäsi.
match.groups.year on helpompi lukea kuin match[1].
Usein kysytyt kysymykset
Mitä regex-murretta tämä testaaja käyttää?
JavaScriptiä (ECMAScript) selaimesi sisäänrakennetun RegExp-olion kautta. Suurin osa syntaksista on yhteistä PCRE:n, Pythonin ja Javan kanssa, mutta ominaisuudet kuten possessiiviset kvanttorit, atomiset ryhmät ja inline-määreet kuten (?i) eivät ole käytettävissä JavaScriptissä.
Miksi lausekkeeni löytää vain yhden osuman?
Ilman g-lippua (global) JavaScript pysähtyy ensimmäiseen osumaan. Ota g käyttöön löytääksesi kaikki esiintymät.
Miten viittaan ryhmiin korvauksessa?
Käytä $1, $2… numeroiduille ryhmille, $<name> nimetyille ryhmille, $& koko osumalle ja $$ dollarimerkille sellaisenaan.
Miksi testaaja pysähtyi aikakatkaisuun?
Lauseke vei syötteelläsi yli sekunnin, mikä tarkoittaa lähes aina katastrofaalista paluuhakua. Etsi sisäkkäisiä kvanttoreita kuten (x+)+ tai päällekkäisiä vaihtoehtoja kuten (a|a)* ja kirjoita ne uudelleen niin, että jokainen merkki voi täsmätä vain yhdellä tavalla.
Lähetetäänkö testidatani jonnekin?
Ei. Haku tapahtuu paikallisesti Web Workerissa selaimessasi. Lauseke ja teksti tallennetaan vain omaan selaimeesi, jotta ne ovat tallessa, kun palaat.
Aiheeseen liittyvät työkalut