javascript - Peg.js 和正则表达式之间的区别

标签 javascript regex peg

我想使用 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_

我期望结果是"is"、“否”、“否”、"is"、“否”、“否”、"is"、"is",但我在正常情况下可以正常工作的正则表达式错误中兜圈子。

最佳答案

当一条 Hook 规则匹配失败时,它会尝试匹配下一条规则,直到用完所有规则。尝试按照以下思路进行操作:

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

关于javascript - Peg.js 和正则表达式之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52531280/

相关文章:

javascript - 在 javascript 中使用 getElementsByTagName 获取输入字段的值和名称?

javascript - 如何使 block 中的所有链接在新选项卡中打开

parsing - 解析器不会停止解析任意换行符和空格

javascript - Vuex 更新数组作为对象的值

javascript - 反转 CSS3 变换矩阵

css - 如何在 python3 中替换非标准标签的属性?

php - 正则表达式验证从 -10 到 10 的数字范围,步长为 .5

javascript - 如何将多个可能的正则表达式值与给定字符串进行比较

node.js - PEGjs:如果浮点规则失败,则回退(回溯?)到字符串

python - 解析表达式语法中的转义字符串