【问题标题】:JavaScript split() adding extra item to array in Firefox/IE onlyJavaScript split() 仅在 Firefox/IE 中向数组添加额外项目
【发布时间】:2013-07-25 19:48:02
【问题描述】:

我正在尝试使用 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中,在选择三行信息时,它将其正确匹配为3,将它们输出到阵列,并通过世界上没有护理的雏菊领域嬉戏。

不过,在 IE10 和 Firefox 19 中,它可以很好地匹配前三个换行符,然后拉出一个额外的空白。因此 \n 表达式将其拆分为 四个 项,然后撞上一栋建筑物并杀死数百人。

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

我还阅读了很多关于人们在使用 regexp、JS、浏览器、换行符和 Excel 时遇到的痛苦,但其中大部分似乎与旧浏览器更相关,所以我希望有人了解当前状态事情可以提供一些见解。

谢谢!

【问题讨论】:

    标签: javascript regex excel browser split


    【解决方案1】:

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

    您应该可以在.split()'ing 之前使用.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/

    【讨论】:

    • 嗯,浏览器不应该假设... trim() 方法工作得很好,非常感谢。稍后我可能会考虑第二个选项,因为我在 IE8 上有几个用户,AFAIK 不支持 trim()。
    • @walkah 是的,它是ES5 method,而 IE8 基于 ES3。但是,MDN 为旧版浏览器提供了 polyfill
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多