Регулярное выражение для групп аргументов catch командной строки - PullRequest
1 голос
/ 11 марта 2019

Если у меня есть следующий сценарий для этого приложения командной строки, которое я строю ...

update DIFFICULTY=1 DESCRIPTION="some long run on description"

Я хочу захватить DIFFICULTY=1, и я хочу захватить DESCRIPTION="some long run on description" как две отдельные группы,и если я в конечном итоге добавлю больше к API, потенциально к другому полю DESCRIPTION, как бы я поступил так, используя регулярное выражение?Оболочка не имеет большого значения с левой стороны.

Я до сих пор получил это, но он не улавливает весь цитируемый текст описания, и при этом я не думаю, что это отделит потенциальное будущее от дополнительногополя описания.

/([A-Z])([\w="])+/g

Я использую библиотеку регулярных выражений ядер .NET, чтобы выяснить это как FYI, на случай, если в регулярных выражениях js есть какие-то ошибки.

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Ну, да, вы можете использовать регулярные выражения, но это будет выглядеть так:

(?<=\s)(\w+=(?:"(?:(?<=\\)"|[^"])+"|[\S]+))

(попробуйте здесь)

Не все проблемы должны решаться с помощью регулярных выражений, и я предлагаю вам посмотреть ссылку , предоставленную LocEngineer в комментариях.

0 голосов
/ 11 марта 2019

Вы можете использовать условное регулярное выражение:

\b(?P<key>[A-Z]+)=(")?(?P<value>(?(2)[^"]*|\S+))

См. демонстрацию на regex101.com .


Более многословно, это означает:
\b               # a word boundary
(?P<key>[A-Z]+)  # only UPPERCASE letters -> group "key"
=                # =
(")?             # capture quotes if they are present
(?P<value>       # start group "value"
    (?(2)[^"]*   # if quotes were present, match anything up to new quotes
    |            # ... or ...
    \S+)         # anything not a whitespace, 1+ times
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...