javascript按照tab符号分割,将多个连续的tab当做一个tab的问题

chokobo 2012-10-09 04:56:22
javascript版人不多,转到这里来问

通过ajax得到csv文件的内容,想将每一行数据按照tab符号进行分割,得到每一个项目的内容。
现在遇到一个问题,如果csv文件中某一项内容为空,那么就会出现连续的tab符号。但是在IE下,split(/\t/g)之后,会把几个连续的tab符号当做一个tab符号进行分割,这样得到的项目数就比定义的要少,项目的位置也会发生错位。

csv文件的分隔符只能用tab,这个是既存系统中已经定义好的,无法修改用逗号当做分隔符。

请问如何解决这种情况。
...全文
835 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kongxh1218 2012-10-16
  • 打赏
  • 举报
回复
上面手误,不要用正则
kongxh1218 2012-10-16
  • 打赏
  • 举报
回复
你用正则


<script>
var str = "a b";
var arr = str.split('\t');
document.write("<ul>");
for (var i = 0; i < arr.length; i++) {
document.write("<li>" + arr[i] + "</li>");
}
document.write("</ul>");
</script>
chokobo 2012-10-16
  • 打赏
  • 举报
回复
回楼上,关键是连续两个tab之间是没有空的
wangyizhi58 2012-10-15
  • 打赏
  • 举报
回复
这样试试可以吗? 如果有空的那你先用一个字符串替换,然后tab再区分,最后再把替换的字符串再换会空的
chokobo 2012-10-15
  • 打赏
  • 举报
回复
无法用正则分割解决了,只能循环找到tab来substring处理了。

function getDataRows(text){
var sepChar = '\t';
var dataRows = new Array();

if(text == '') {
return dataRows;
}

var arr = text.split(/\r\n/g);
if(arr.length == 0) {
return dataRows;
}

for (var i=0; i<arr.length; i++) {
if(arr[i] == '') {
continue;
}
dataRows[i] = new Array();
var j = 0;
var tabIndex = 0;
while (tabIndex > -1) {
tabIndex = arr[i].indexOf(sepChar);
if(tabIndex > -1){
dataRows[i][j] = arr[i].substring(0, tabIndex);
arr[i] = arr[i].substring(tabIndex+1);
j++;
}
else {
dataRows[i][j] = arr[i];
}
}
}

return dataRows;
}
chokobo 2012-10-10
  • 打赏
  • 举报
回复
在firefox里是不会有问题的,只有在IE里有问题。使用的是IE7,可以加个alert(result.length);看一下
  • 打赏
  • 举报
回复
貌似没有问题
var str = '1\t2\t\t3';
alert(str);
var result = str.split(/\t/g);
for (var i in result)
alert(result[i]);
//包含4个元素,分别为 1,2,空,3

61,651

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧