我试图通过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的痛苦,但大多数似乎与旧浏览器更相关,所以我希望有人了解当前的状态事情可以提供一些见解。
谢谢!
答案 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);