在IE中正则表达不引用报价

时间:2012-04-06 21:09:24

标签: javascript regex internet-explorer

我无法让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玩得很好?

6 个答案:

答案 0 :(得分:0)

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

试试这个正则表达式:

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

下次,在放弃IE之前确保你的代码是正确的,kay?

答案 1 :(得分:0)

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

我建议使用不同的正则表达式:

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

答案 2 :(得分:0)

你的正则表达式在Firefox中对我不起作用。

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

请尝试使用.+?

答案 3 :(得分:0)

这个正则表达式似乎适用于IE。这是一种不同的方法:

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

我不确定为什么另一个不起作用,但这可能与*的贪婪有关。

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

答案 4 :(得分:0)

检查browser type如果类型是IE,则再添加一个regex进行替换以选择引号内的文本(s / \“// g),最后执行你想要的任何内容。

答案 5 :(得分:-1)

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

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

bgImg = bgImg.substr(5, bob.length - 7);