使用IE在换行问题上拆分字符串

时间:2012-11-16 14:06:51

标签: javascript internet-explorer

我正在使用此代码检测字符串中的新行。

var result = str.split(/\r\n|\r|\n/g);

但是在IE8中,如果只有第一个连续的新行,则会拆分字符串。

示例:

Hello
  ...\n
people

被视为

Hello
people

欣赏任何解决方案或建议。

2 个答案:

答案 0 :(得分:2)

旧版IE(IE8及更早版本)中存在已知错误,其中split()会删除空元素 - 这正是您报告的问题。

这个错误在IE9中得到修复,但如果您需要支持任何早于此版本的IE版本,那么您将遇到此问题。

解决这个bug真的不容易。我见过有人建议overriding the split() function entirely,但这似乎有点矫枉过正(可能会产生意想不到的副作用)。

当我过去遇到这个问题时,我最终确保我的字段总是有一个值,即使它是空白的。对于空白字段,我将它们放入空格或零或标记字符,然​​后我可以将其删除。在这个例子中,不确定该解决方案对你有多大帮助,但这就是我所做的。

答案 1 :(得分:1)

我认为有一种解决方法,首先使用replace(separator, '\0'),然后split('\0')不完美但有效。

实施例

'a||b'.replace(/\|/g, '\0').split('\0'); // => ['a', '', 'b'];

并使用此作为拆分的修复,似乎比SDC的答案中建议的更好(不标准但很简单,并修复空元素消除问题)。你可以把它放在评论中。

<!--[if IE lt 9]><script type="text/javascript">
(function(orgSplit) {
  String.prototype.split = function(seperator, limit) {
    if (seperator instanceof RegExp)
      return this.replace(seperator, '\0').split('\0', limit);
    else
      return orgSplit.call(this, seperator, limit);
  };
})(String.prototype.split);
</script><![endif]-->