0

我正在尝试使用 JavaScript split() 方法了解不同浏览器的行为,通过换行符 (\n) 正则表达式进行匹配。

我有一个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 进行拆分,但这似乎会带来更多麻烦。我还将 Excel 行复制到 Notepad++ 并打开 CRLF 字符的可见性,看到似乎只有 3 个,那么为什么 IE 和 Firefox 添加另一个?

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

谢谢!

4

1 回答 1

1

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

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

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/

于 2013-07-25T19:53:01.287 回答