0

我无法让 IE 与我的正则表达式配合得很好。我正在尝试获取背景图片并在网站的其他地方使用它。它适用于除 IE 之外的所有浏览器(当然)。

这是代码:

var bgImg = body.css('background-image').replace(/^url\(['"]*(.+)['"]*\).*/, '$1');

它确实应该可以工作,但由于某种原因,IE 没有捕捉到最后一个报价,而是返回了这个:

http://mydomain.com/images/bg-image.jpg "

没有replace它会返回这个:

url("http://mydomain.com/images/bg-image.jpg")

我的正则表达式不应该处理最后一个双引号吗?如何让 IE 玩起来好听?

4

6 回答 6

0

IE 是正确的。您告诉它匹配任意数量的任意字符,后跟零个或多个引号,后跟一个右括号。IE 将最后一个引号作为“任何字符”的一部分进行匹配,因为它应该是默认的,因为量词是贪婪的。

试试这个正则表达式:

/^url\(['"]?([^'"]+)['"]?\)$/

下一次,在破坏 IE 之前确保你的代码是正确的,好吗?

于 2012-04-06T21:15:14.197 回答
0

我很难相信其他浏览器没有显示出这种正确的行为。您的第一个捕获组应始终包含引号,因为您使用了一个贪婪的量词,并且您已将结束引号设为可选。

我会建议一个不同的正则表达式:

var bgImg = body.css('background-image').replace(/^url\((['"]?)(.+?)\1\).*/, '$2');
于 2012-04-06T21:16:16.770 回答
0

您的正则表达式在 Firefox 中也不适用于我。

这是因为.+它是贪婪的,并且会尽可能多地消耗字符串。

尝试.+?改用。

于 2012-04-06T21:16:25.160 回答
0

这个正则表达式似乎在 IE 中工作。这是一种不同的方法:

/^url\(['"]*([^'")]+)['"]*\).*/

我不确定为什么另一个不起作用,但这可能与 *.

你的在 IE9 中对我来说失败了,这个正则表达式在这里工作:http: //jsfiddle.net/jfriend00/yyqB6/

于 2012-04-06T21:20:27.217 回答
0

如果类型是 IE,请检查浏览器类型,然后再添加一个正则表达式进行替换以选择引号内的文本(s/\"//g),最后执行您想要的任何操作。

于 2012-04-06T21:30:09.063 回答
-1

也许不使用正则表达式,而只使用substr

var bgImg = body.css('background-image');

bgImg = bgImg.substr(5, bob.length - 7);
于 2012-04-06T21:11:41.267 回答