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ď č. 1Môžete použiť negatívny lookahead takto:
url(([""]?)((?:(?!data:image).)+?)1?)