JavaScript split()仅在Firefox / IE中向数组添加额外项

时间:2013-07-25 19:48:03

标签: javascript regex excel browser split

我试图通过JavaScript split()方法了解不同浏览器的行为,并通过换行(\ n)regexp进行匹配。

我有一个 textarea 输入表单,用于从Excel粘贴行并通过换行符将其拆分为数组:

var rowsplit = document.getElementById("inputfield").value.split(/\n/g);

用户通过侧栏选择Excel中的行,因此前11列有数据,并且在我稍后切片()的电子表格边缘之后有一大堆空列。因此Excel的典型输入是:

[data][data][data][data]x11[null][null][null]etc until edge of spreadsheet

区别在于正则表达式匹配并推入数组。

在Chrome 28和Safari 5.1中,当选择三行信息时,它正确匹配\ n为3,将它们输出到数组并在世界范围内嬉戏穿过雏菊场。

在IE10和Firefox 19中,它匹配前三个换行符,然后拉出一个空白的额外换行符。因此\ n表达式将其拆分为四个项目,崩溃进入建筑物并杀死数百个。

我已经阅读了很多关于处理CRLF字符的不同浏览器的不同之处,并试图通过\ r \ n和\ r \ n分割,但它似乎引入了更多麻烦。我还将Excel行复制到Notepad ++中,并打开了CRLF字符的可见性,看到只有3,所以为什么IE和Firefox又添加了一个?

我也阅读了很多关于人们对正则表达式,JS,浏览器,换行符和Excel的痛苦,但大多数似乎与旧浏览器更相关,所以我希望有人了解当前的状态事情可以提供一些见解。

谢谢!

1 个答案:

答案 0 :(得分:1)

据推测,IE10和Firefix 19将该值视为具有额外的尾随换行符。 .split()不会因为它在最后而忽略它。

您应该可以在.split()之前使用.trim()将其删除:

var rowsplit = document.getElementById("inputfield").value.trim().split(/\n/g);

另一种选择是使用zero-width look-ahead仅匹配其后有任何内容的\n

var rowsplit = document.getElementById("inputfield").value.split(/\n(?=\s*\S)/g);

每个例子:http://jsfiddle.net/FChES/