IE8解析这个简单的正则表达式与其他所有浏览器不同

9

我正在尝试使用这个函数从value中创建2个结果。

function split(val){
  return val.split( /,\s*/ );
};
value = "Jim, ";
var terms = split( value );

terms;

所有其他浏览器(包括IE9)将产生terms = ["Jim", ""]

然而,IE8和可能是IE7会产生这个结果:terms = ["Jim"]

有没有人有任何建议或替代方案可以在IE8上起作用?


1
有趣的发现。在使用字符串(例如此示例中的 ", ") 进行分割时,IE8 的行为是正确的,但在使用正则表达式进行分割时却没有最后的空字符串...很奇怪。 - Niet the Dark Absol
2
如需替代方案,请参见https://dev59.com/rknSa4cB1Zd3GeqPN3H5上的答案。 - Andrew Morton
你能解释一下在什么情况下你会担心数组中的最后一个元素为空吗?看看我的编辑。 - abuduba
2个回答

5
你最好选择以下方案:

您可能最好选择以下方案:

val.split(',')

这似乎在所有浏览器中都能始终如一地工作。

在逗号后面的任何尾随空格仍然必须在之后剥离。可以按照以下方式进行处理:

for (var i = 0; i < terms.length; i++) {
    terms[i] = terms[i].replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

显然,在IE8及更早版本中,当使用正则表达式参数时,空字符串匹配会被split()忽略。但使用字符串参数则能正常工作:
'axx'.split('x')    // All browsers: ["a", "", ""]
'axx'.split(/x/)    // IE6/7/8: ["a"], all other browsers: ["a", "", ""]

-1

你需要重写正则表达式。

试试这个。

String.prototype.trim = String.prototype.trim || function() {
    return this.replace(/^\s+|\s+$/g, ''); 
}
function split( str ){
    return (""+str).trim().split( /\,/ );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接