/ / Regex: Negatívny lookahead po zozname zápasov - regex

Regex: Negatívny lookahead po zozname zápasov - regex

Zvážte nasledujúci vstupný reťazec (časť css file):

url("data:image/png;base64,iVBORw0KGgoAAAAN...");
url(example.png);

Cieľom je prevziať časť url pomocou regexu a urobiť s tým niečo. Takže prvá časť je jednoduchá:

url([""]?(.+?)[""]?)

V zásade to vyžaduje obsah zvnútra url(...) s voliteľnými hodnotami symbolov. Pomocou tohto regexp získam nasledujúce zápasy:

data:image/png;base64,iVBORw0KGgoAAAAN...
example.png

Zatiaľ je všetko dobré. Teraz chcem vylúčiť adresy URL, ktoré obsahujú text "data: image". Myslím, že negatívny lookahead je správny nástroj pre to, ale používať to takto:

url([""]?(?!data:image)(.+?)[""]?)

dáva mi prvý výsledok pre prvú adresu URL:

"data:image/png;base64,iVBORw0KGgoAAAAN...

Nielen to nevylučuje tento zápas, ale samotný zodpovedajúci reťazec teraz obsahuje na začiatku znak citácie. + namiesto prvého ? ako toto:

url([""]+(?!data:image)(.+?)[""]?)

funguje podľa očakávania, url nie je zhodný. Ale to neumožňuje voliteľnú ponuku v url (od + je 1 alebo viac). Ako by som mal zmeniť regex na vylúčenie danej adresy URL?

odpovede:

1 pre odpoveď č. 1

Môžete použiť negatívny lookahead takto:

url(([""]?)((?:(?!data:image).)+?)1?)

RegEx Demo