Peg.js 和正则表达式之间的区别
Difference between Peg.js and Regex
我想使用 Peg.js 来解析和验证我一直在用正则表达式做的事情,但我一直在努力解决语法问题。
我的 Peg.js 程序是:
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"
我正在使用以下文本对其进行测试:
test1
no space
1var
_temp
ReallyLongNameisInvalidandLongerthan32
IncorrectChars!!asdf
_
underscore_is_fine_
我希望结果是,不,不,是,不,不,是,是,但我正在兜圈子,出现正常情况下可以正常工作的正则表达式错误。
当一个挂钩规则匹配失败时,它将尝试匹配下一个规则,直到它有 运行 个规则。沿着这些方向尝试:
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"
]
我想使用 Peg.js 来解析和验证我一直在用正则表达式做的事情,但我一直在努力解决语法问题。
我的 Peg.js 程序是:
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"
我正在使用以下文本对其进行测试:
test1
no space
1var
_temp
ReallyLongNameisInvalidandLongerthan32
IncorrectChars!!asdf
_
underscore_is_fine_
我希望结果是,不,不,是,不,不,是,是,但我正在兜圈子,出现正常情况下可以正常工作的正则表达式错误。
当一个挂钩规则匹配失败时,它将尝试匹配下一个规则,直到它有 运行 个规则。沿着这些方向尝试:
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"
]