我想获取参数数组,这样我就可以将它与optparse-js 库一起使用,所以如果我有类似的东西
-f foo -b -a -z baz bar
我想要这样的数组
["-f", "foo", "-b", "-a", "-z", "baz", "bar"]
它应该适用于内部有转义引号和长 GNU 选项的字符串。到目前为止,我有匹配字符串的正则表达式
/("(?:\\"|[^"])*"|'(?:\\'|[^'])*')/g
"das"
它匹配类似or"asd\"asd"
或'asd'
or的字符串'sad\'asd'
我可以为此使用正则表达式还是我需要一个解析器(比如使用 PEG)如果它匹配正则表达式会很好,这样我就可以做到
-p "hello b\"ar baz" -f /^ [^ ]+ $/
更新:在@Damask 的帮助下,我创建了这个正则表达式:
/('(\\'|[^'])*'|"(\\"|[^"])*"|\/(\\\/|[^\/])*\/|(\\ |[^ ])+|[\w-]+)/g
它适用于这样的字符串:
echo -p "hello b\"ar baz" -f /^ [^ ]+ $/
它返回
['echo', '-p', '"hello b\"ar baz"', '-f', '/^ [^ ]+ $/']
但如果在这样的字符串上失败:
echo "©\\\\" abc "baz"
它匹配命令和两个参数而不是 3 个参数演示
如果参数没有像 "foo"baz 这样的空格,它应该是数组中的一项,需要包含引号,但我会从字符串中删除未转义的那些(就像在 bash 中执行echo "foo"bar
echo 时会得到一个 foobar 参数)。