2012-11-16 56 views
0

我使用此代碼來檢測字符串中的新行。新行問題與拆分字符串問題與IE

var result = str.split(/\r\n|\r|\n/g); 

但是,在IE8中如果有連續的新行只在第一個字符串被拆分。

實施例:

Hello 
    ...\n 
people 

被處理像

Hello 
people 

理解任何溶液或建議。

+0

所以你期待有三個元素的數組,但你只能得到兩個元素?順便說一句,'/ \ r?\ n /'更簡單。 –

+0

不完全明白你的問題? – xiaoyi

+0

#Jack是的,這是正確的 – kidwon

回答

2

舊版本的IE(IE8及更早版本)中存在一個已知錯誤,其中split()刪除空元素 - 完全是您要報告的問題。

該錯誤在IE9中得到修復,但如果您需要支持比此更早的任何IE版本,那麼您將遇到此問題。

解決這個問題真的不容易。我看到有人建議overriding the split() function entirely,但這似乎是矯枉過正(可能會有意想不到的副作用)。

當我在過去遇到過這個問題時,我最終確定我的字段總是有價值的,即使它是空白的。對於空白字段,我將它們製作成一個空格或一個零,或者一個標記字符,然​​後我可以稍後將其刪除。不知道在這個例子中這個解決方案對你有多大用處,但這就是我所做的。

+0

但它沒有刪除''a || b'.split('|')'中的空元素? – xiaoyi

+0

該錯誤只發生在正則表達式分割中,而不是字符串分割,所以''|''有效,但'/ | /'會失敗。 – SDC

+0

哎呀,謝謝。真的很痛苦 – xiaoyi

1

我認爲這是一個解決方法,首先使用replace(separator, '\0'),然後split('\0')不完美,但工程。

'a||b'.replace(/\|/g, '\0').split('\0'); // => ['a', '', 'b']; 

,並以此作爲一個修復分裂,似乎更好(不標準,但簡單的解決空元素消除問題)比在SDC的答覆建議。你可以把它放在評論中。

<!--[if IE lt 9]><script type="text/javascript"> 
(function(orgSplit) { 
    String.prototype.split = function(seperator, limit) { 
    if (seperator instanceof RegExp) 
     return this.replace(seperator, '\0').split('\0', limit); 
    else 
     return orgSplit.call(this, seperator, limit); 
    }; 
})(String.prototype.split); 
</script><![endif]-->