为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪9158850 2021-08-20 18:57:31
我试图解析的命令行字符串是这样的:   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个赞

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

  1. screenshot 在字符串的开头,后跟一个空格。

  2. 可选地,方括号内包含的任何内容 [...]

  3. 另一个可选空格,然后是其他所有内容,直到字符串末尾。

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

  1. (screenshot)␠

  2. (\[.+\])?

  3. ␠?(.+)

    (截图)。+?([.+]) ?(.+)

我假设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)"


查看完整回答
反对 回复 2021-08-20
  • 1 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信