Regex-testaaja JavaScriptille

Kirjoita säännöllinen lauseke ja näe jokainen osuma korostettuna kirjoittaessasi, kaappausryhmien, korvauksen esikatselun ja valmiiden lausekkeiden kirjaston kera.

Toimii selaimessaEi rekisteröitymistäMitään ei lähetetä

Osumat korostettuina

    
Käytä $1, $<name>, $& (koko osuma)
Osumien tiedot
#IndeksiOsumaRyhmät
Regex-lunttilappu
.Mikä tahansa merkki paitsi rivinvaihto (kaikki s-lipulla)
\d \w \sNumero, sanamerkki, tyhjämerkki
\D \W \SEi numero, ei sanamerkki, ei tyhjämerkki
[abc] [^abc]Jokin / ei mikään merkeistä a, b, c
[a-z0-9]Merkkiväli
\p{L} \p{N}Unicode-kirjain / -numero (vaatii u)
^ $Syötteen alku / loppu (rivin m-lipulla)
\b \BSanaraja / ei sanaraja
* + ?0 tai enemmän, 1 tai enemmän, 0 tai 1
{n} {n,} {n,m}Tasan n, vähintään n, n–m kertaa
*? +? ??Laiska (mahdollisimman vähän)
a|ba tai b
(…)Kaappausryhmä, viittaus $1
(?<name>…)Nimetty ryhmä, $<name>
(?:…)Ei-kaappaava ryhmä
\1 \k<name>Takaisinviittaus
(?=…) (?!…)Lookahead / negatiivinen lookahead
(?<=…) (?<!…)Lookbehind / negatiivinen lookbehind
\. \* \\Escapetut literaalimerkit
\n \t \rRivinvaihto, sarkain, vaunun palautus
\uFFFFUnicode-koodiyksikkö
\u{1F600}Koodipiste (vaatii u)
$&Koko osuma korvauksessa
$` $'Teksti ennen / jälkeen osuman

Näin käytät työkalua: Regex-testaaja

  1. Syötä lauseke vinoviivojen väliin ilman ympäröiviä /-merkkejä.
  2. Kytke lippuja, kuten g (kaikki osumat), i (ohita kirjainkoko) ja m (monirivinen).
  3. Liitä testiteksti. Osumat korostetaan oikealla ja listataan alla indeksin ja kaappausryhmien kera.
  4. Valitse Korvaa ja syötä korvaus kuten $1 tai $<name> esikatsellaksesi String.replace-kutsua.
  5. 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

LippuNimiVaikutus
gglobalEtsii jokaisen osuman sen sijaan, että pysähtyisi ensimmäiseen.
iignoreCaseKirjaimet täsmäävät kirjainkoosta riippumatta.
mmultiline^ ja $ osuvat jokaisen rivin alkuun ja loppuun.
sdotAll. osuu myös rivinvaihtoihin.
uunicodeKäsittelee lausekkeen koodipisteinä; ottaa käyttöön \p{…} ja \u{…}.
ystickyEtsii osumaa vain nykyisestä lastIndex-kohdasta.
dhasIndicesIlmoittaa 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