我对 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"
并尝试使用单词“stackoverflow”
我不习惯改变数组中的单词。
此致。
PegJS 尝试匹配第一个值。只有当这不成功时,它才会尝试第二个,依此类推。由于您的情况stack
可以匹配,因此它不会继续尝试匹配其他任何内容。
当一个匹配项是另一个匹配项的前缀时,经常会出现此问题。在这种情况下,您应该以“较长”术语开始列表,并将前缀放在末尾:
Text = Word
Word = "stackoverflow"/"stack"/"overflow"
Run Code Online (Sandbox Code Playgroud)
您还可以匹配多个单词。在这种情况下,stack
和overflow
都会匹配,但 不会匹配stackoverflow
。
Text = Word*
Word = "stack"/"overflow"/"stackoverflow"
Run Code Online (Sandbox Code Playgroud)