JavaScript:使用空格字符拆分多个空格字符串将返回一个包含2个空白字符的数组

JavaScript:使用空格字符拆分多个空格字符串将返回一个包含2个空白字符的数组,javascript,string,Javascript,String,我试图在JavaScript中按空格字符(\s)拆分字符串。但当我提供一个包含多个空格字符的字符串时,它返回一个包含2个空白字符的数组。下面是我的代码: let s = " "; console.log(s.split(/\s+/)); 这是输出: ►(2) ["", ""] 有人能解释一下,这里发生了什么吗?您的正则表达式\s+将匹配一行中的一个或多个空格字符,并在找到匹配项时拆分字符串。您的字符串

我试图在JavaScript中按空格字符(
\s
)拆分字符串。但当我提供一个包含多个空格字符的字符串时,它返回一个包含2个空白字符的数组。下面是我的代码:

let s = "                 ";
console.log(s.split(/\s+/));
这是输出:

►(2) ["", ""]

有人能解释一下,这里发生了什么吗?

您的正则表达式
\s+
将匹配一行中的一个或多个空格字符,并在找到匹配项时拆分字符串。您的字符串包含1个或多个空格字符,因此它将删除这些字符并将字符串分成两半。其中一半是比赛前的绳子部分,另一半是比赛后的绳子部分。在您的例子中,这两个部分最终都没有字符。然而,split函数并不在意,它找到了它要查找的空格字符,所以它完成了它的工作并拆分了字符串。

您正在使用的正则表达式,
\s+
,匹配任何非零数量的“空格”字符,并且分配给变量
s
的整个字符串都匹配该正则表达式。因此,整个
s
将其左端(
)与其右端(

\s+分开的字符串不会按每个空格字符分开,而是按无限的空格字符序列分开。我的意思是,每一个空格序列都将被视为一个单独的分隔符。例如:

let s = "asd           fgh jkl";
console.log(s.split(/\s+/));
>> (3) ["asd", "fgh", "jkl"]
拆分时,即使emtpy字符串也会返回一个数组,其中包含一个空元素,而指针不是空的

let s = "";
console.log(s.split(/\s+/));
>> (1) [""]

let s = "";
console.log(s.split(/a/));
>> (1) [""]

let s = "";
console.log(s.split(" "));
>> (1) [""]
如果针恰好位于字符串的开始或结束处,则字符串仍在部分拆分,并推送一个空元素。它发生在任何类型的字符上(不仅仅是空格)。检查以下示例:

let s = " a ";
console.log(s.split(/\s+/));
>> (3) ["", "a", ""]

let s = "aaaaaaaaaa";
console.log(s.split(/\a+/));
>> (2) ["", ""]

let s = "a a";
console.log(s.split(/\a+/));
>> (3) ["", " ", ""]
从一个只包含空格的非空字符串返回两个空元素就是这样的结果,因为空格序列是字符串的开始和结束:

let s = " ";
console.log(s.split(""));
>> (2) ["", ""]

let s = "          ";
console.log(s.split(/\s+/));
>> (2) ["", ""]
如果要返回空字符串,请考虑对生成数组中的空元素进行筛选:

let s = "          ";
console.log(s.split(/\s+/).filter(b => b != ''));
>> []
或者干脆

let s = "          ";
console.log(s.split(/\s+/).filter(b => b));
>> []
只有当指针为空时,才会返回空数组:

let s = "";
console.log(s.split(/()/));
>> []

let s = "";
console.log(s.split(""));
>> []

\s表示任何空格字符,因此它将把下列空格视为一个。如果你只关心空格字符,那么就用split(//)来代替。我很好奇你期望发生什么,以及你希望得到什么结果?