регулярное выражение pegjs сопоставляет слова до тех пор, пока не будет найдено слово из набора слов

Я использую генератор синтаксического анализатора pegjs для проекта, и у меня возникают трудности с созданием грамматики, которая должна соответствовать всем словам, вплоть до набора слов, которые не должны совпадать. в качестве примера в строке «дверь желтая» я хочу иметь возможность сопоставлять все слова до тех пор, пока не будет, скажите синтаксическому анализатору pegjs, чтобы он начал синтаксический анализ со слова «есть». Набор слов, который я хочу, чтобы синтаксический анализатор сломал, это «есть», «имеет» и «из».

Текущее грамматическое правило выглядит следующим образом:

subject "sub" = 
s:[a-zA-Z ]+ { return s.join("").trim()}

Как я могу создать предварительный просмотр, который не позволит синтаксическому анализатору включить мою коллекцию слов?

(!of|is|has)

person Tyler Oliver    schedule 05.01.2016    source источник


Ответы (1)


Это будет работать

.+(?=\s+(of|is|has))

Он соответствует одному или нескольким любым символам (кроме разрывов строк), пока не встретит «из», «есть» или «имеет» (посредством положительного просмотра) с пробелом перед ними.

person RedLaser    schedule 05.01.2016