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

JavaScript split() adding extra item to array in Firefox/IE only

本文关键字:数组 添加 IE split 仅在 Firefox JavaScript      更新时间:2023-09-26

我正试图用JavaScript split()方法来理解不同浏览器的行为,该方法通过linefeed(''n)regexp进行匹配。

我有一个文本区域输入表单,它将从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

区别在于regexp匹配的内容和推入数组的内容。

在Chrome 28和Safari 5.1中,当选择三行信息时,它会将''n正确匹配为3,将它们输出到阵列中,并在菊花区中嬉戏,而不会在意。

不过,在IE10和Firefox 19中,它可以很好地匹配前三个换行符,然后再提取一个空白换行符。因此,''n表达式将其拆分为四个项目,撞上一栋建筑并导致数百人死亡。

我读了很多关于不同浏览器以不同方式处理CRLF字符的文章,并尝试通过''r''n和just进行拆分,但这似乎会带来更多麻烦。我还将Excel行复制到Notepad++中,并打开CRLF字符的可见性,看到只有3个字符,那么为什么IE和Firefox要添加另一个呢?

我也读过很多关于regexp、JS、浏览器、换行符和Excel的痛苦,但其中大部分似乎与旧浏览器更相关,所以我希望了解当前情况的人能提供一些见解。

谢谢!

据推测,IE10和Firefix 19认为该值具有额外的尾部换行符。.split()不会因为它在末尾就忽略它。

您应该能够在.split()'ing:之前用.trim()将其删除

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

另一种选择是使用零宽度前瞻,只匹配后面有任何内容的'n

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

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