猿问

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

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


这是我的标准输出:



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))


慕哥9229398
浏览 211回答 1
1回答

狐的传说

您可以使用正则表达式 -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]+- 一个或多个\ror \n,然后是\s* - 零个或多个空格
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答