可以在 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"
]
]
像 /\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"
]
]