以下工作对于我正在尝试做的事情很好,但它显然是非常重复的。它应该与以下示例匹配:
- #id.class1.class2 attr="asdsa"
- .class1.class2 attr="asdsad"
- attr="asds"
使用起来很诱人
id:idShortcut? classes:classShortcut* attrs:fullAttribute*
但是如果所有三个组件都不存在,我不希望它匹配。如何指定 3 个可选组件的规则,但必须至少存在一个?
attributes = id:idShortcut classes:classShortcut* attrs:fullAttribute*
{
var ret = [['id', id]];
for(var i = 0; i < classes.length; ++i ) {
ret.push(['class', classes[i]]);
}
for(var i = 0; i < attrs.length; ++i ) {
ret.push(attrs[i]);
}
return ret;
}
/ classes:classShortcut+ attrs:fullAttribute* {
// TODO: how to dry this with the above?
var ret = [];
for(var i = 0; i < classes.length; ++i ) {
ret.push(['class', classes[i]]);
}
for(var i = 0; i < attrs.length; ++i ) {
ret.push(attrs[i]);
}
return ret;
}
/ attrs:fullAttribute+ {
var ret = [];
for(var i = 0; i < attrs.length; ++i ) {
ret.push(attrs[i]);
}
return ret;
}