考虑以下输入字符串(css
文件的一部分):
url('data:image/png;base64,iVBORw0KGgoAAAAN...');
url(example.png);
目标是使用正则表达式获取url部分并使用它执行某些操作。所以第一部分很简单:
url\(['"]?(.+?)['"]?\)
基本上,它使用可选引号符号从url(...)
内部获取内容。使用此正则表达式,我得到以下匹配:
data:image/png;base64,iVBORw0KGgoAAAAN...
example.png
到目前为止一切顺利。现在我想在其文本中排除包含“data:image”的网址。我认为负向前瞻是适当的工具,但使用它是这样的:
url\(['"]?(?!data:image)(.+?)['"]?\)
给出了第一个网址的以下结果:
'data:image/png;base64,iVBORw0KGgoAAAAN...
它不仅不排除这种匹配,而且匹配的字符串本身现在包含开头的引号字符。如果我使用+
代替第一个?
,请执行以下操作:
url\(['"]+(?!data:image)(.+?)['"]?\)
它按预期工作,url不匹配。但是这不允许url中的可选引用(因为+
是1或更多)。我该如何更改正则表达式以排除给定的网址?