在Javascript中解析mbox - split()行为

时间:2012-08-13 17:52:30

标签: javascript parsing split

我有一个包含7条消息的mbox文件。我尝试使用字符串“From - ”上的以下代码解析它。生成的对象长度 8 ,即使只有7次出现的字符串。即使第一次出现的字符串位于第一行的第一个空格处,解析似乎包含之前的,并且第一个元素的值的打印输出为'0'(剩下的元素是合适的字符串)。为什么还有一个额外的元素(是我的方法行为代码)?

var fs = require('fs');

// Read in the text file

fs.readFile( '../Data/Inbox 6Msg Mbox.txt', function (err, data) {
  if (err) {
    throw err; 
  }

// Convert file to a string object

  var unParsed = data.toString();

// Split the text into an array of strings where each
// element is a message

  var indivMessages = unParsed.split("From -");
  console.log(indivMessages.length);

});

2 个答案:

答案 0 :(得分:1)

你犯的错误被称为fencepost error。虽然你有七次出现这个字符串,但这会导致之间的七个而不是八个部分出现字符串。

例如:

'1|2|3'.split('|')

返回

['1','2','3']

即使管道只出现两次

即使我将管道作为第一个字符,结果数组也是相同的长度:

'||'.split('|')

返回

 ['','','']

逻辑相同,但现在''已取代'1''2''3'

答案 1 :(得分:0)

当拆分字符/字符串是字符串的第一部分时,它会在它之前添加一个空索引。

var str = "aXbXcXdXeXf";
console.log(str.split("X"));  

结果为["a","b","c","d","e","f"];

var str = "XaXbXcXdXeXf";
console.log(str.split("X"));

结果为["","a","b","c","d","e","f"];