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

时间:2019-07-25 00:03:01

标签: javascript regex

我要解析的命令行字符串如下:

   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 个答案:

答案 0 :(得分:0)

您的正则表达式导致字符串在任何字母字符后被空格分隔。您需要将命令行字符串分解为其组件:

  1. screenshot在字符串的开头,后跟一个空格。
  2. 可选地,方括号[...]中包含的所有内容
  3. 另一个可选的空格,然后是所有其他内容,直到字符串结尾。

在RegEx中分组的每个组件都可以表示为:

  1. (screenshot)␠
  2. (\[.+\])?
  3. ␠?(.+)

    (屏幕截图)。+?([。+])?(。+)

我假设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)"
相关问题