2

我试图用三个关键字分割一个字符串,如下所示:

var option=$(this).text().split(/(To:|From:|Line:)/);

$(this).text()用于测试目的“From:Circular Quay To:Manly Line:F1 Manly”

所有“普通”浏览器都返回一个包含 7 个元素的数组,但 IE7 和 8 返回一个包含 3 个元素的数组。

有任何想法吗?

4

1 回答 1

3

正如本文所述,正则表达式拆分在所有浏览器中的工作方式都不同。

  • Internet Explorer 从结果数组中排除了几乎所有的空值(例如,当两个分隔符在数据中彼此相邻时,或者当分隔符出现在数据的开头或结尾时)。这对我来说没有任何意义,因为 IE 在使用字符串作为分隔符时确实包含空值。

  • Internet Explorer 和 Safari 不会将捕获括号的值拼接到返回的数组中(此功能对于简单的解析器等很有用)

  • 由于未参与的捕获组,Firefox 不会将未定义的值拼接到返回的数组中。

  • Internet Explorer、Firefox 和 Safari 有各种额外的边缘情况错误,它们不遵循拆分规范(这实际上非常复杂)。

(注意:这些行为在最近的浏览器中有所改变,不要依赖这些描述来实现浏览器特定的算法!)

对您来说好消息,如果分隔符的顺序始终相同:您可能真正感兴趣的内容字符串将在所有浏览器中出现。所以你只需要测试数组的每个字符串,看看它是空字符串还是分隔符。

如果您的字符串始终具有相同顺序的分隔符,您可能希望通过不捕获它们来在所有浏览器中剥离它们:

var s = s.split(/To:|From:|Line:/);

如果您需要分隔符,因为它们的顺序可能会改变,那么您最好拆分\b并检查所有字符串。

于 2013-07-15T06:42:52.113 回答