2011-10-28 58 views
3

我有以下jQuery的調用,它返回FF/Chrome的比賽,但在IE 8正則表達式匹配()在FF/Chrome,但不是IE 8

Here's the fiddle返回null如果你想自己嘗試一下。

而這裏的不溶性的,unpliable,任性代碼:

var m = $('#somediv').text().match(/\d+-(\d+)\sof\s(\d+)/); 

編輯:感謝Rob W.我已經收窄這一點;以下的作品,所以它特別是失敗的「of」或「\ sof \ s」。叉小提琴和嘗試一些自己:(

var m = $('#somediv').text().match(/\d+\D(\d+)\D+(\d+)/); 
+0

適用於IE 9的我,在IE 8模式下失敗。 –

+0

嗯,對,IE 8 - 更新說明;謝謝 – Kato

回答

3

大廈羅布W公司的答案,這在回升問題replace默認情況下不會全局替換,這裏關閉的其他內容是您正在搜索的實際文本。羅布W¯¯還指出,既然你要使用jQuery的text()文本中, 實體已被解碼的實際,事實不間斷空格字符。

 是一個HTML實體,指定它作爲參數傳遞給replace是不會真正把它解釋爲一個非換空間,它只是要去尋找目標字符串中的實際文本 

指定的Unicode碼點在搜索正則表達式中的IE 8和IE 7兼容模式爲我工作在非打破空間(00A0):

var m = t.replace(/\u00a0/g, ' ').match(/\d+-(\d+)\sof\s(\d+)/); 

事情在IE 9正常工作,因爲它像其他瀏覽器在\s中包含非中斷空格。 Older versions of IE don't,這是替代品有必要的唯一原因。

+0

看起來很有希望!在IE 8中不適合我;你能發現任何錯誤嗎? http://jsfiddle.net/pgtJr/2/ – Kato

+0

我發現了這個問題;我切換到RegExp並忘記加倍逃離我的空間與\\ :)工程很好,謝謝你!他們沒有翻譯成實際的空間令人討厭! – Kato

+0

(爲什麼我在喊?!) – Kato

2

您的代碼將只能更換的 第一次出現,但由於你要使用.text()文本,應該沒有必要的replace功能。

var m = t.replace(/ /g, ' ').match(/\d+-(\d+)\sof\s(\d+)/); 

如果使用前行不解決您的問題,使用alert(t)檢查是否如預期的輸入。

+0

很棒的比賽;另外,我不知道關於文本()! – Kato

+0

當然,錯誤仍然存​​在在IE – Kato

+1

加藤,我不能在IE8測試,但嘗試以下圖案:'\ d + \ d +(\ d +)\ d +(\ d +)/' –

2

使用這個正則表達式:

/\d+-(\d+)\xa0of+\xa0(\d+)/ 

http://jsfiddle.net/gilly3/KNbpN/

可悲的是,現在看來,IE8不承認非打破空間的白色空間(\s)匹配。

+0

太棒了!感謝gilly3 – Kato

相關問題