我有一个程序的输出流,其中包含可用打印机的列表,我想将其转换为数组。
这是我的标准输出:
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))
答案 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
-零个或多个空格