Javascript正则表达式-嵌套时匹配左括号和右括号
我有一个正则表达式可以从css获取背景URL:Javascript正则表达式-嵌套时匹配左括号和右括号,javascript,regex,Javascript,Regex,我有一个正则表达式可以从css获取背景URL: /(@import.*?)?url\(([^)]+)\)/gi 这在大多数情况下都适用。然而,css在野外是另一回事。即使它无效,我也需要匹配url('/pix/ajax/ajax-loader(2.gif'),以及更典型的url(/assets)/domainsbg@2x-0d8ea9b405f202ff135ced3cdb4658cc.png)。我已经利用了我有限的正则表达式能力,需要一些帮助。我使用的测试用例是: background:ur
/(@import.*?)?url\(([^)]+)\)/gi
这在大多数情况下都适用。然而,css在野外是另一回事。即使它无效,我也需要匹配url('/pix/ajax/ajax-loader(2.gif')
,以及更典型的url(/assets)/domainsbg@2x-0d8ea9b405f202ff135ced3cdb4658cc.png)
。我已经利用了我有限的正则表达式能力,需要一些帮助。我使用的测试用例是:
background:url('/pix/ajax/ajax-loader(2.gif'))
背景:url(/pix/ajax/ajaxloader(2.gif)
背景:url(/assets)/domainsbg@2x-0d8ea9b405f202ff135ced3cdb4658cc.png)
背景:url('/assets)/domainsbg@2x-0d8ea9b405f202ff135ced3cdb4658cc.png')
背景图像:url(file.gif);
背景图像:url('file.gif')不重复;
背景:#FF0000 url(“file.gif”)不重复;
背景:#FF0000 url(“文件%20space.gif”)不重复;
仅供参考,我知道正则表达式有问题,使用它进行解析通常不是最好的解决方案,但在这种情况下,我陷入了困境。以下正则表达式处理所有测试用例:
url\(.*\)
顺便说一句:是一个很好的网站来测试你的正则表达式的飞行
var regex = new RegExp(/^\s*background.*:.*url\((.+)\)/i);
console.log(regex.exec("background: url('/pix/ajax/ajax-loader (2).gif')")[1]);
HTH这是非常不雅观的,但是在提取URL时不使用分隔符(即,不使用任何单引号或双引号)应该是可行的: 您将为组
$1
、$2
或$3
提取任何非空匹配项
这适用于除此之外的所有示例:
background: url(/pix/ajax/ajax-loader (2).gif)
但是有充分的理由,因为其中一个有无效的语法。为了澄清,CSS不能缩小或在同一行上包含多个url(…)
事件,这样才能工作。RegEx不能很好地处理嵌套,但在这种情况下(假设CSS格式正确),这应该是可以接受的解决方案。
background: url(/pix/ajax/ajax-loader (2).gif)