【发布时间】:2015-08-22 22:13:23
【问题描述】:
考虑以下输入字符串(css 文件的一部分):
url('data:image/png;base64,iVBORw0KGgoAAAAN...');
url(example.png);
目标是使用正则表达式获取 url 部分并对其进行处理。所以第一部分很简单:
url\(['"]?(.+?)['"]?\)
基本上,它从url(...) 内部获取带有可选引号符号的内容。使用这个正则表达式我得到以下匹配:
data:image/png;base64,iVBORw0KGgoAAAAN...
example.png
到目前为止一切顺利。现在我想排除在其文本中包含“数据:图像”的网址。我认为负前瞻是合适的工具,但像这样使用它:
url\(['"]?(?!data:image)(.+?)['"]?\)
为第一个 url 提供以下结果:
'data:image/png;base64,iVBORw0KGgoAAAAN...
不仅不排除这个匹配,而且匹配的字符串本身现在在开头包含引号字符。如果我像这样使用+ 而不是第一个?:
url\(['"]+(?!data:image)(.+?)['"]?\)
它按预期工作,url 不匹配。但这不允许在 url 中使用可选引号(因为 + 是 1 或更多)。我应该如何更改正则表达式以排除给定的 url?
【问题讨论】:
标签: regex