Regex 正则表达式:列表匹配后的负前瞻

Regex 正则表达式:列表匹配后的负前瞻,regex,Regex,考虑以下输入字符串(css文件的一部分): 目标是使用正则表达式获取url部分并对其进行处理。所以第一部分很简单: url\(['"]?(.+?)['"]?\) 基本上,它从带有可选引号和符号的url(…)内部获取内容。使用此regexp,我获得以下匹配项: data:image/png;base64,iVBORw0KGgoAAAAN... example.png 到目前为止还不错。现在我想排除在文本中包含“data:image”的URL。我认为消极前瞻是解决这一问题的合适工具,但使用它的方

考虑以下输入字符串(css文件的一部分):

目标是使用正则表达式获取url部分并对其进行处理。所以第一部分很简单:

url\(['"]?(.+?)['"]?\)
基本上,它从带有可选引号和符号的
url(…)
内部获取内容。使用此regexp,我获得以下匹配项:

data:image/png;base64,iVBORw0KGgoAAAAN...
example.png
到目前为止还不错。现在我想排除在文本中包含“data:image”的URL。我认为消极前瞻是解决这一问题的合适工具,但使用它的方式如下:

url\(['"]?(?!data:image)(.+?)['"]?\)
url\(['"]+(?!data:image)(.+?)['"]?\)
url\((['"]?)((?:(?!data:image).)+?)\1?\)
为第一个url提供以下结果:

'data:image/png;base64,iVBORw0KGgoAAAAN...
它不仅不排除此匹配,而且匹配的字符串本身现在在开头包含引号字符。如果我使用
+
而不是第一个
如下:

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

它按预期工作,url不匹配。但这不允许在url中使用可选的引号(因为
+
是1或更多)。如何更改正则表达式以排除给定的url?

您可以像这样使用负前瞻:

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