我知道这个问题是 5 年前提出的,但我只是在清理 [pegjs] 标签中未回答的问题。
这似乎有效,您只需要替换postfix
为您的进一步处理规则。
subject "sub" = prefix:prefix breakWord:breakWord postfix:postfix "\n"? {
return { prefix: prefix, breakWord, postfix }
}
prefix = $(!breakWord .)* { return text().trim() }
postfix = [^\n]* { return text().trim() }
breakWord
= "is"
/ "has"
/ "of"
它通过输入“门是黄色的”生成这个:
{ prefix: "the door", breakWord: "is", postfix: "yellow" }
注意几件事:
- 表格
(!breakWord .)
有点慢;它向前看以确保当前输入不以breakWord
替代集合中的任何单词开头——对于前缀中的每个字符。
- 如果您有以一组常见字符开头的中断词(例如“is”和“isn't”),请确保较长的词在
breakWord
规则中位于第一个位置。
- 当前
postfix
规则假定换行符可能会终止输入。