PEG.js Разрешить любой текст между двумя тегами - PullRequest
0 голосов
/ 12 июня 2018

У меня проблемы с определением выражения, которое допускает любой текст между двумя тегами (включая эти теги).

Примеры:

#ifdef
 asdasdasdasdasdsasd
asdasdasdasdasdasdasd
asdasdasdasdasdasasd
#endif

Также должно быть разрешено

#ifdef
asdasdasd
asdasdsad
#ifdefasdasdasd
asdasdasd
#endif#endif
asdasdasd
asdasdasd
#endif

Итак, как вы можете видеть, до тех пор, пока он начинается и заканчивается с #ifdef и endif, любой текст внутри должен быть в порядке.

Может кто-нибудь помочь мне создать такое выражение?

ЧтоДо сих пор я пытался это:

H_IF_IGNORE 
= ("#ifdef) _
  H_IF_IGNORE / (!"#endif"i SourceCharacter)*
  "#endif"

Но он работает не очень хорошо, и в итоге потребляет больше текста после последнего endif.

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 12 июня 2018

внутренняя часть может быть либо другой #ifdef, либо повторной SourceCharacter, поэтому обе части должны быть в скобках.

Попробуйте что-то в этом духе:

H_IF_IGNORE
= "#ifdef" _*
  (H_IF_IGNORE / (!"#endif" SourceCharacter))* _*
  "#endif"

SourceCharacter = .

_ = [\s\n]
...