【发布时间】:2012-12-10 07:20:21
【问题描述】:
我想获取参数数组,这样我就可以将它与optparse-js library 一起使用,所以如果我有类似的东西
-f foo -b -a -z baz bar
我想要这样的数组
["-f", "foo", "-b", "-a", "-z", "baz", "bar"]
它应该适用于内部有转义引号和长 GNU 选项的字符串。到目前为止,我有匹配字符串的正则表达式
/("(?:\\"|[^"])*"|'(?:\\'|[^'])*')/g
它匹配像"das"或"asd\"asd"或'asd'或'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"
它匹配命令和两个参数而不是三个参数demo
如果参数没有像 "foo"baz 这样的空格,它应该是数组中的一项,需要包含引号,但我会从字符串中删除未转义的那些(就像在 bash 中执行 echo "foo"bar echo 时一样一个 foobar 参数)。
【问题讨论】:
-
要从第一个字符串到提到的数组,你可以使用 split(" ") 但我假设你需要详细说明前两句 ( ̄(エ) ̄)
-
@mplungjan 我需要可以与
-p "hello b\"ar baz" -f /^ [^ ]+ $/类似的解决方案 -
所以我建议你交换你的例子,并用一个真实的例子来展示数组的样子
-
输入是否为“-f foo -b -a -z baz bar”是否为字符串
标签: javascript regex