我试图解析的命令行字符串是这样的: 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 参数。
1 回答
守着星空守着你
TA贡献1799条经验 获得超8个赞
您的正则表达式导致字符串被拆分为后跟空格的任何字母字符。您需要将命令行字符串分解为其组成部分:
screenshot
在字符串的开头,后跟一个空格。可选地,方括号内包含的任何内容
[...]
另一个可选空格,然后是其他所有内容,直到字符串末尾。
这些组件中的每一个都在 RegEx 中分组,可以表示为:
(screenshot)␠
(\[.+\])?
␠?(.+)
(截图)。+?([.+]) ?(.+)
我假设z
inscreenshotz
是一个错字。
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)"
添加回答
举报
0/150
提交
取消