145

如果我尝试

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

我得到以下

[ 'my, tags are, in here' ]

而我想要

['my', 'tags', 'are', 'in', 'here']
4

7 回答 7

290

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

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

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

于 2012-04-27T07:46:23.047 回答
52

您可以使用正则表达式来捕获任何长度的空白,这就像:

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" 
于 2015-09-22T22:06:04.097 回答
44

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

如果这对您的用例没问题,那很好。但是,如果您想摆脱空元素,您可以这样做:

var str = 'whatever your text is...';
str.split(/[ ,]+/).filter(Boolean);
于 2014-05-19T02:08:57.420 回答
12
"my, tags are, in here".split(/[ ,]+/)

结果是:

["my", "tags", "are", "in", "here"]
于 2012-04-27T07:47:39.893 回答
10

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

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

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

于 2012-04-27T07:50:30.333 回答
2

当我想考虑逗号等额外字符时(在我的情况下,每个标记都可以用引号输入),我会执行 string.replace() 将其他分隔符更改为空白,然后在空格上拆分。

于 2013-06-21T22:37:49.143 回答
0

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

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

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

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

于 2021-10-05T22:33:25.323 回答