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