2

在学习 JavaScript 时,我不明白为什么打印 Sting.split() 方法(以正则表达式作为参数)返回的数组时的输出如下所述。

var colorString = "red,blue,green,yellow";
var colors = colorString.split(/[^\,]+/);
document.write(colors); //this print 7 times comma: ,,,,,,,

但是,当我打印数组颜色的单个元素时,它会打印一个空字符串、三个逗号和一个空字符串:

 document.write(colors[0]);  //empty string
 document.write(colors[1]);  //,
 document.write(colors[2]);  //,
 document.write(colors[3]);  //,
 document.write(colors[4]);  //empty string
 document.write(colors[5]);  //undefined
 document.write(colors[6]);  //undefined

那么,为什么直接打印数组会给出七个逗号。

虽然我认为在第二个输出中使用三个逗号是正确的,但我不明白为什么会有一个开始(在索引 0 处)和结束空字符串(在索引 4 处)。

请解释我在这里搞砸了。

4

3 回答 3

8

/[^\,]+/拆分一个或多个不是逗号的字符。因此,JavaScript 会将您的字符串拆分为redblue。然后,生成的剩余部分是开头的空字符串(从索引 0 到 0 的子字符串)、逗号和结尾的空字符串。如果你超出了你得到的数组的范围undefined(就像任何数组一样)。

red,blue,green,yellow
xxx xxxx xxxxx xxxxxx   <-- x is what is being eaten during split, because it's the delimiter

您只需要.split(","),它以逗号分隔,以便逗号被吃掉,而您只剩下颜色。

现在,当您这样做时document.write(someArray),数组将转换为字符串以便显示。这实际上意味着someArray.join()被调用,默认情况下在两者之间放置逗号。所以你得到逗号连接逗号,从而产生更多的逗号。

于 2012-10-13T21:24:14.477 回答
5

当你打印出数组时,数组的不同元素也用逗号分隔。所以你的输出是这 5 个数组元素:

[empty string],[comma],[comma],[comma],[empty string]

共 7 个逗号。你得到逗号和空字符串而不是颜色的原因是,它split会在所有匹配的地方分割(而不是给你所有匹配的东西)。所以根本不使用正则表达式,而只是拆分,

var colors = colorString.split(',');
于 2012-10-13T21:24:44.883 回答
2

[^\,] <- 这意味着除了逗号之外的任何东西。

尝试 var colors = colorString.split(',');

于 2012-10-13T21:25:25.270 回答