我要解析的命令行字符串如下:
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参数。
答案 0 :(得分:0)
您的正则表达式导致字符串在任何字母字符后被空格分隔。您需要将命令行字符串分解为其组件:
screenshot
在字符串的开头,后跟一个空格。[...]
中包含的所有内容在RegEx中分组的每个组件都可以表示为:
(screenshot)␠
(\[.+\])?
␠?(.+)
(屏幕截图)。+?([。+])?(。+)
我假设z
中的screenshotz
是错字。
使用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)"