PEG.js 匹配数组中的单词

PEG.js matching word from Array

我对 PEG.js 和匹配词有疑问。

看起来像这样: Words = "stack"/"overflow"/"Whosebug" - 当我尝试匹配 "Whosebug" 时它显示错误 Expected end of input but "o" found. 所以它找到了 stack 并认为它结束了 - overflow 被留下了。

您可以在这里尝试:https://pegjs.org/online 并粘贴:

Text = Word Word = "stack"/"overflow"/"Whosebug" 并尝试使用单词 "Whosebug"

我不习惯更改数组中的单词。

此致。

PegJS 尝试匹配第一个值。只有这一次不成功,它才会尝试第二次,依此类推。 在您的情况下 stack 可以匹配,它不会继续尝试匹配其他任何东西。

当一个匹配项是另一个匹配项的前缀时,经常会出现此问题。在这种情况下,您应该以 "longer" 项开始列表并将前缀放在末尾:

Text = Word
Word = "Whosebug"/"stack"/"overflow"

您也可以匹配多个词。在这种情况下 stackoverflow 都会匹配,但 Whosebug.

不会匹配
Text = Word*
Word = "stack"/"overflow"/"Whosebug"