Парсинг регуляркой параметров CLI команды.

Есть
var str = 'command -arg1 paramX1 paramX2 paramX3 -arg2 paramY1 paramY2 paramY3';

сие нужно распарсить следующим образом:
arr[0] = 'command';
arr[1] = 'arg1 paramX1 paramX2 paramX3';
arr[2] = 'arg2 paramY1 paramY2 paramY3';

Фактически задача сводится к "матчингу" всего что есть между - и -
Но как обрабатывать последний апргумент, после которого более не встретится символ "-" ?
Благодарю заранее.

1 ответов


Если вам нужно именно регулярное выражение:


var str = 'command -arg1 paramX1 paramX2 paramX3 -arg2 paramY1 paramY2 paramY3';
str.match(/^\S+|[^-]+(?!-)/g);
//["command", "arg1 paramX1 paramX2 paramX3", "arg2 paramY1 paramY2 paramY3"]
 
Хотя можно сделать проще:

var str = 'command -arg1 paramX1 paramX2 paramX3 -arg2 paramY1 paramY2 paramY3';
str.split(" -");
//["command", "arg1 paramX1 paramX2 paramX3", "arg2 paramY1 paramY2 paramY3"]
 

Такой Javacript


var str = 'command -arg1 paramX1 paramX2 paramX3 -arg2 paramY1 paramY2 paramY3';
str.match( /([^-]*)*\s/g )
 
отдает такой массив

["command ", "arg1 paramX1 paramX2 paramX3 ", "arg2 paramY1 paramY2 "]