正则表达式:列表匹配后的否定前瞻

时间:2015-06-08 12:31:40

标签: regex

考虑以下输入字符串(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或更多)。我该如何更改正则表达式以排除给定的网址?

1 个答案:

答案 0 :(得分:1)

你可以使用这样的负向前瞻:

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

RegEx Demo