我有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"
我不会改变数组中的单词。
最诚挚的问候。
答案 0 :(得分:3)
PegJS尝试匹配第一个值。只有这不成功,它才会尝试第二个,依此类推。
在您的情况下stack
可以匹配,它将不会继续尝试匹配任何其他内容。
当一个匹配是另一个匹配的前缀时,通常会出现此问题。在这种情况下,您应该使用"更长的"条款并将前缀放在最后:
Text = Word
Word = "stackoverflow"/"stack"/"overflow"
您还可以匹配多个单词。在这种情况下,stack
和overflow
都会匹配,但不会stackoverflow
。
Text = Word*
Word = "stack"/"overflow"/"stackoverflow"