我想了解使用JavaScript split()方法通过换行符(\ n)regexp进行匹配的不同浏览器的行为。javascript split()仅在Firefox/IE中向阵列添加额外项目
我有一个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的痛苦,但其中大部分似乎与旧浏览器更相关,所以我希望有人知道当前状态的东西可以提供一些见解。
谢谢!
嗯,浏览器不应该假设... trim()方法完美工作,非常感谢。因为我有几个用户在IE8上AFAIK不支持trim(),所以我可能会稍后再看第二个选项。 – walkah
@walkah是的,这是一个[ES5方法](http://es5.github.io/#x15.5.4.20),而IE8基于ES3。但是,MDN为旧版浏览器提供了[polyfill](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Compatibility)。 –