optparse-js ライブラリで使用できるように引数の配列を取得したいので、次のようなものがある場合
-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"
3 つの引数のデモではなく、コマンドと 2 つの引数に一致します
引数に "foo"baz のようなスペースがない場合は、配列内の 1 つの項目にする必要があります。引用符を含める必要がありますが、文字列からエスケープされていないものを削除します (bash でecho "foo"bar
echo を実行すると 1 つの foobar 引数が取得されるように)。