javascript:如何使用空格拆分此命令行字符串但 args 包含空格

我试图解析的命令行字符串是这样的:


   screenshotz [ 'li[title="about us"] a', 3,2 ] 

div.react-bs-container-body tr > td:nth-child(1)

我期待列表中有以下 3 个项目:


    [`screenshotz`,`['li[title="about us"] a', 3,2]`,

 `div.react-bs tr > td:nth-child(1)`]

我正在做一个command.split(/[A-z] /g),但是,我最终得到了 3 个以上,它考虑到了第二个和最后一个参数中的每个空间。


基本上我需要允许任何类型的字符,但是一个明确的规则是用户可以在没有[ ... ]字符的情况下提交:


screenshot div.react-bs-container-body tr > td:nth-child(1)


哪个应该返回 [screenshot, div.react-bs....]


它始终遵循此规则,[...]不能在 css 选择器之后。


如何使用命令中“外部”而不是单个参数参数内部的空格来拆分字符串?


所以它不应该在参数参数字符串中分割空格。例如,css 有大量的空间,但它应该都是一个 arg 参数。


慕田峪9158850
浏览 165回答 1
1回答

守着星空守着你

您的正则表达式导致字符串被拆分为后跟空格的任何字母字符。您需要将命令行字符串分解为其组成部分:screenshot 在字符串的开头,后跟一个空格。可选地,方括号内包含的任何内容 [...]另一个可选空格,然后是其他所有内容,直到字符串末尾。这些组件中的每一个都在 RegEx 中分组,可以表示为:(screenshot)␠(\[.+\])?␠?(.+)(截图)。+?([.+]) ?(.+)我假设zinscreenshotz是一个错字。split在数组的开头和结尾使用结果为空白结果,相反,我建议使用matchAll:command = `screenshot [ 'li[title="about us"] a', 3,2 ]div.react-bs-container-body tr > td:nth-child(1)`Array.from(command.matchAll(/(screenshot) (\[.+\]) ?(.+)/sg))结果是:Array(4)0: "screenshot [ 'li[title="about us"] a', 3,2 ] ↵div.react-bs-container-body tr > td:nth-child(1)"1: "screenshot"2: "[ 'li[title="about us"] a', 3,2 ]"3: "↵div.react-bs-container-body tr > td:nth-child(1)"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript