PEG.js匹配来自Array的单词

时间:2017-07-03 12:50:52

标签: javascript peg

我有PEG.js和匹配单词的问题。

看起来像这样: Words = "stack"/"overflow"/"stackoverflow" - 当我尝试匹配" stackoverflow"它显示错误Expected end of input but "o" found.,因此它找到了stack并认为它已结束 - overflow被遗漏。

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

Text = Word Word = "stack"/"overflow"/"stackoverflow"并尝试使用word" stackoverflow"

我不会改变数组中的单词。

最诚挚的问候。

1 个答案:

答案 0 :(得分:3)

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

当一个匹配是另一个匹配的前缀时,通常会出现此问题。在这种情况下,您应该使用"更长的"条款并将前缀放在最后:

Text = Word
Word = "stackoverflow"/"stack"/"overflow"

您还可以匹配多个单词。在这种情况下,stackoverflow都会匹配,但不会stackoverflow

Text = Word*
Word = "stack"/"overflow"/"stackoverflow"