Peg.js和Regex之间的区别

时间:2018-09-27 07:03:01

标签: javascript regex peg

我想使用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,但是正则表达式会出现错误,并且通常可以正常工作。

1 个答案:

答案 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"
]