在NodeJS中按多个空格分割字符串

18

我在Node中有这个:

>out
'java    1303 root  187u   CHR  166,0      0t0 14586 /dev/ttyACM0\n'
>typeof out
'string'
> out.split("\\s+"); 
[ 'java    1303 root  187u   CHR  166,0      0t0 14586 /dev/ttyACM0\n' ]

我希望获得拆分后的字符串,例如 ['java', '1303', 'root'...]


2
.split(/\s+/) ? - Andrey
1
out.split(/\s+/)。"\\s+"是一个字符串,编译器将搜索精确值而不是模式。使用正则表达式进行模式匹配。 - Rajesh
2个回答

39

感谢您的评论。 看起来根本不需要引号:

> out.split(/\s+/); 

Split接受一个正则表达式 - 除了在Java中,正则表达式不像字符串那样被初始化。 - baao
@bambam 不仅仅是Java,大多数编译型语言都没有正则表达式字面量。 - Franklin Yu
1
如果这个答案提到了修剪以处理前导或尾随空格,那就太好了。就像 out.trim().split(/\s+/) 一样。 - Wyck
显然,\s也匹配换行符。如果您想在“空格 换行符 空格”上拆分,但不是在“空格”上拆分,该怎么办? - johny why

10
你可以使用字面字符串\s+进行分割,例如将 "a\\s+b" 分割成 ab
也可以使用正则表达式,如RegExp("\\s+")/\s+/(后者更好,因为模式是静态的)。

var s = 'java    1303 root  187u   CHR  166,0      0t0 14586 /dev/ttyACM0\n';
console.log(s.trim().split(/\s+/));

我建议对输入进行修剪,以消除开头/结尾的空元素。 此外请注意.split(/\s+/g)等同于.split(/\s+/) (使用String#split()时,全局匹配标志是隐含的)。

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