Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript正则表达式-嵌套时匹配左括号和右括号_Javascript_Regex - Fatal编程技术网

Javascript正则表达式-嵌套时匹配左括号和右括号

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

我有一个正则表达式可以从css获取背景URL:

/(@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)