2011-04-05 175 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);