将程序的输出流转换为数组

时间:2019-06-08 18:27:16

标签: javascript node.js

我有一个程序的输出流,其中包含可用打印机的列表,我想将其转换为数组。

这是我的标准输出:


OneNote                        

Microsoft XPS Document Writer  

Microsoft Print to PDF         

Fax                            



我正在寻找一种可以给我的解决方案:

['OneNote', 'Microsoft XPS Document Writer', 'Microsoft Print to PDF', 'Fax']

我尝试了stdout.split('\n'),但它变成了

[
 'OneNote                        \r\r', 
 'Microsoft XPS Document Writer  \r\r', 
 'Microsoft Print to PDF         \r\r', 
 'Fax                            \r\r',
 '\r\r',
 ''
]

然后我尝试了stdout.split('\r\r\n'),结果变成了

[
 'OneNote                        ', 
 'Microsoft XPS Document Writer  ', 
 'Microsoft Print to PDF         ', 
 'Fax                            ',
 '',
 ''
]

现在我可以从字符串stdout.split('\r\r\n').map(printer => printer.trim())的末尾删除空格,但是我仍然需要过滤掉最后两个空字符串,所以我想知道是否有更好/更优雅的方法来解决问题?

stdout.split('\r\r\n')
  .map(printer => printer.trim())
  .filter(printer => Boolean(printer.length))

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式-

Template

在下面的完整程序中查看它的工作-

input.trim().split(/\s*[\r\n]+\s*/)

正则表达式的目标是用可选的空格括起来的任何回车符const input = ` OneNote Microsoft XPS Document Writer Microsoft Print to PDF Fax ` const output = input.trim().split(/\s*[\r\n]+\s*/) console.log(output) // [ // "OneNote", // "Microsoft XPS Document Writer", // "Microsoft Print to PDF", // "Fax" // ]和/或换行符\r。可以理解为-

  • \n-零个或多个空格,后跟
  • \s*-一个或多个[\r\n]+\r,然后是
  • \n-零个或多个空格