Мне нужно написать лексер, который бы правильно отображал команды моего инструмента командной строки.
$ dvc add file.csv
$ dvc pipeline list
Таким образом, команда начинается с dvc
и может иметь одну или две подкоманды - add
или pipeline list
соответственно.
Следовательно, в первом и втором случае следует выделить dvc add
и dvc pipeline list
соответственно.
contains: [
{
begin: /^\s*\$\s(dvc|git) [a-z-]+/,
returnBegin: true,
contains: [
{
begin: /dvc [a-z-]+ ?/,
lexemes: '[a-z-]+',
keywords: {
built_in:
'dvc'
},
contains: [
{
begin: /\w+(?![\S])/,
keywords: {
built_in: 'list'
}
}
],
className: 'strong'
}
]
}
]
Соответствует dvc pipeline list
, даже если родительское регулярное выражение т.е. /^\s*\$\s(dvc|git) [a-z-]+/
должен совпадать только до dvc pipeline
. Как это точно работает?
Как /dvc [a-z-]+ ?/
переопределяет его и продолжает сопоставлять выражение?
Пожалуйста, обратитесь к этой библиотеке документов здесь: https://highlightjs.readthedocs.io/en/latest/reference.html