2012-04-06 51 views
0

我無法使IE與我的正則表達式很好地搭配。我試圖抓住背景圖片並在網站的其他地方使用它。它適用於除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

這個正則表達式似乎在IE中工作。這是一個不同的方法:

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

我不知道是什麼原因,另一個沒有工作,但它可能與的貪婪做*。

此致失敗,我在IE9和這個表達式在這裏工作:http://jsfiddle.net/jfriend00/yyqB6/

+0

非常感謝:完美的作品。 – 2012-04-06 21:36:33

0

也許不使用正則表達式,只是用SUBSTR

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

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

IE是正確的。您告訴它匹配任意數量的任何字符,後跟零個或多個引號,後跟一個右括號。 IE將匹配最後一個引用作爲「任何字符」的一部分,因爲它應該,因爲量詞默認爲貪婪。

試試這個正則表達式:

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

下一次,請確保您的代碼是瞧不起IE,凱才正確?

+0

哈哈,你真的站起來了IE嗎? – 2012-04-06 21:33:57

+0

呃,考慮到自從IE4以來我一直在使用它,現在在IE9上,並且從來沒有遇到過任何問題,是的,我正在爲此付出努力。 – 2012-04-06 21:34:52

+0

我想知道爲什麼它可以在多種版本的Safari,Chrome,Opera和Firefox中使用,包括Windows和Mac版本......我都在測試。 – 2012-04-06 21:42:47

0

我很難相信其他瀏覽器不顯示這種正確的行爲。你的第一個捕獲組應該總是包含這個引用,因爲你使用了一個貪婪的量詞,並且你已經使得結束引用是可選的。

我會提出一個不同的正則表達式:

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

你的正則表達式不爲我工作在Firefox兩種。

這是因爲.+是貪婪的並且消耗盡可能多的字符串。

嘗試使用.+?來代替。

0

檢查browser type,如果該類型IE,然後添加一個正則表達式替換選擇裏面引號(S/\「// G)和文本最後執行任何你想要的。