如何用空格或逗号分割字符串?

如果我尝试

"my, tags are, in here".split(" ,")

我得到了以下信息

[ 'my, tags are, in here' ]

而我想要

['my', 'tags', 'are', 'in', 'here']
200130 次浏览

String.split() 也可以接受正则表达式:

input.split(/[ ,]+/);

这个特定的正则表达式在一个或多个逗号或空格序列上进行分割,因此,例如,多个连续的空格或逗号 + 空格序列不会在结果中产生空元素。

"my, tags are, in here".split(/[ ,]+/)

结果是:

["my", "tags", "are", "in", "here"]

input.split(/\s*[\s,]\s*/)

... \s*匹配零个或多个空白字符(不仅是空格,还有制表符和换行符)。

[\s,]匹配一个空格字符或一个逗号

当我需要考虑像逗号这样的额外字符时(在我的例子中,每个标记都可以用引号输入) ,我会使用 string.place ()将其他分隔符更改为空格,然后在空格上分隔。

使用 .split(/[ ,]+/)的建议是好的,但是使用自然句子迟早会导致数组中出现空元素。例如 ['foo', '', 'bar']

如果这对你的用例来说没问题的话。但是如果你想摆脱空元素,你可以这样做:

var str = 'whatever your text is...';
str.split(/[ ,]+/).filter(Boolean);

你可以使用正则表达式来捕捉任意长度的空白,这就像:

var text = "hoi how     are          you";
var arr = text.split(/\s+/);


console.log(arr) // will result : ["hoi", "how", "are", "you"]


console.log(arr[2]) // will result : "are"

当您需要使用某些 单身字符分隔符分隔字符串时,可以考虑使用反向逻辑: 匹配由除分隔符字符以外的字符组成的字符串块。

因此,要提取除空格(与 \s匹配)和逗号之外的所有字符块,可以使用

console.log("my, tags are, in here".match(/[^\s,]+/g))
// => ["my","tags","are","in","here"]

参见 正则表达式演示.String#match提取除空格和逗号([^\s,])之外的一个或多个(+)字符的所有非重叠出现。