可以在 PEG 中表达类似 /\s(foo|bar|baz)\s.*/

It is possible to express in PEG something like /\s(foo|bar|baz)\s.*/

/\s(foo|bar|baz)\s.*/ 这样的正则表达式将匹配以下字符串:

football bartender bazooka baz to the end
                          ^^^^^^^^^^^^^^^

是否可以制定一个解析表达式语法规则 以类似的方式解析字符串,将其拆分为 Head 和 Tail?

Result <- Head Tail

football bartender bazooka baz to the end
         Head             |    Tail

是的,可以使用 PEG 实现。这是一个使用 pegjs:

的例子
start = f:words space r:tail
{
   return [f, r];
}

tail = f:"baz" space r:words
{
   return r;
}

words = f:word r:(space word)*
{
   return [f].concat(r).flat().filter(n => n);
}

word = !tail w:$([A-Za-z]+)
{
   return w;
}

space = " "
{
   return;
}

输出:

[
   [
      "football",
      "bartender",
      "bazooka"
   ],
   [
      "to",
      "the",
      "end"
   ]
]