有没有标准说"aba".split(/ a /)应该返回1,2或3个元素?

qbo*_*lec 9 javascript string split

从我测试过

"aba".split(/a/).length
Run Code Online (Sandbox Code Playgroud)

回报

  • ie8中的1
  • 3在firefox,chrome,opera中

我总是准备处理DOM操作或事件模型的差异,但我认为像字符串,正则表达式等的定义很明确.我错了吗?

Den*_*ret 4

IE 从结果数组中删除split所有未定义或空字符串。

由于您的问题似乎是关于标准的存在,那么 EcmaScript 是 Javascript 世界中最好的匹配。

正则表达式上的 split 行为记录:http://www.ecma-international.org/ecma-262/5.1/#sec-15.5.4.14

从示例中可以明显看出,不应从结果数组中删除空字符串,因此 IE(如怀疑)是错误的。

"A<B>bold</B>and<CODE>coded</CODE>".split(/<(\/)?([^<>]+)>/)

    evaluates to the array

["A", undefined, "B", "bold", "/", "B", "and", undefined,  "CODE", "coded", "/", "CODE", ""]
Run Code Online (Sandbox Code Playgroud)

事实上,浏览器之间还存在其他差异。解决方案可能是使用跨浏览器拆分正则表达式脚本,但最好只是了解差异并通过适当的测试处理split. 或者使用一些技巧。