2011-04-05 114 views
1

我有一個列表中的字符串,如下(從id=list一個<textarea>元素):從split()避免換行符?

q1 

q2 
q3 


q4 

的JavaScript:

var TA = document.getElementById("list").value; 
lines = TA.split("\r\n"); 

我想lines變量的值分別爲q1,q2,q3,q4, 但結果是q1,,q2,q3,,,q4(注意空的項目)

我想避免結果數組中的空白字符串 - 我該怎麼做?

+0

請格式化你的問題的方式,使其可讀之前......我試圖解釋你的意思是失敗了。 – 2011-04-05 11:43:08

+0

@kobi:thaks爲對齊 – kiran 2011-04-05 11:54:16

回答

2

將數組拆分後,可以從數組中刪除空元素。見

Remove empty elements from an array in Javascript

+0

感謝通過使用下面的jQuery代碼它奇妙地工作var arr = [1,2,3,3 ,,, 0 ,,, 4,,5,,6 ,,,,]; arr = $ .grep(arr,function(n,i){ return(n); }); arr // [1,2,3,4,4,5,6] – kiran 2011-04-05 11:58:54

+0

@kiran - 注意該函數正在從數組中刪除falsy值 - '0'也被刪除! – Kobi 2011-04-05 12:01:00

+0

@kobi:Thaks我沒有注意到,i灣保留0也 – kiran 2011-04-05 12:07:44

6

嘗試這樣的事情,也應該採取的新線等格式照顧(例如,僅\n):

var lines = TA.split(/[\r\n]+/); 

或者之前刪除空行和空格/您的令牌後(這一個只會匹配\r\n格式,但可以使用[\r\n]代替):

var lines = TA.split(/\s*\r\n\s*/); 

或者,你可以匹配線分裂換行符代替:

var lines = TA.match(/.+/g); 

.不符合新的生產線,所以.+真的匹配整條生產線,並跳過空行。這也會跳過數組開頭或結尾的空標記(如\n\n a \n b),而split仍會創建空元素。

+0

我想匹配換行符,但除了那些空的新行 – kiran 2011-04-05 11:50:23

+0

@kiran - 嘗試它們,它們都應該工作。如果你正在談論最後的選擇 - 那是三者中最好的!你*不希望匹配換行符 - 你想匹配**行**'))' – Kobi 2011-04-05 11:53:45

+0

謝謝,最後一個在Mozilla中令人驚歎,但在IE中它不工作,我用IE7測試了 – kiran 2011-04-05 12:05:02

1

一個替換多個\ r \ n拆分

TA.replace(/(\r\n)+/g, "\r\n").split("\r\n") 
+0

@steefan:它不能將所有的情況下,可能可以有雙空行或triplr空行。 – kiran 2011-04-05 11:53:36

+0

正則表達式適用於任意數量的換行符(+代表一個或多個)。因此,double,tripple或100個空行,正則表達式將用一個換行符替換它們。 – 2011-04-05 12:09:29

0

使用var lines = TA.split(/[\r\n]{1,}/g);