javascript - Peg.js 和正则表达式之间的区别
问题描述
我想使用 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_
我希望结果是 YES,NO,NO,YES,NO,NO,YES,YES,但是我会在正常情况下正常工作的正则表达式错误中绕圈子。
解决方案
当一个 peg 规则匹配失败时,它将尝试匹配下一个规则,直到它用完规则。尝试以下方式:
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"
]
推荐阅读
- caching - Redis 为每个数据库设置 maxmemory
- report - Report Designer Tables join
- wordpress - iOS 通用链接在 Nginx 中不起作用?
- javascript - 反应复选框值不变
- time-complexity - 算法作业的运行时间
- networking - 为什么自托管应用程序的 nslookup 域给出错误“;;从 192.168.1.15 获得递归不可用,尝试下一个服务器”而不是其他域?
- python - 如何在 VS 代码下找到更多 Juypter 执行按钮?
- java - Java 接口错误:类型不是通用的;它不能用参数参数化
- python - easysnmp 并从 Python 中的 OID 列表中获取值
- angular - 带有指令的同级元素的角度 addEventListenr 不起作用