我想使用Peg.js来解析和验证我对正则表达式所做的工作,并在语法上苦苦挣扎。
我的Peg.js程序是:
<ul class="text-error">
<ul id="files-error">Furry:</ul>
<li> Fish </li>
<li> Bird </li>
<li class="file-error">Bear</li>
<li class="file-error">Cat</li>
</ul>
我正在用以下文本进行测试:
start = (var / other) cr
d:var {return d.join('')}
var = [^(?=.{1,32}$)([a-zA-Z_][a-zA-Z0-9_]*)$] {return "OK"}
other = . {return "NOT OK"}
cr = "\n"
我期望结果为YES,NO,NO,YES,NO,NO,YES,YES,但是正则表达式会出现错误,并且通常可以正常工作。
答案 0 :(得分:1)
当钉子规则不匹配时,它将尝试匹配下一个规则,直到用完所有规则。尝试以下方法:
start = line+
line = d:(var / other)
{
return d;
}
var = v:$([a-zA-Z_][a-zA-Z0-9_]*) cr
{
if (v.length > 32) {
return "no";
} else {
return "yes";
}
}
other = [^\n]+ cr
{
return "no";
}
cr = "\n"
输出:
[
"yes",
"no",
"no",
"yes",
"no",
"no",
"yes",
"yes"
]