PEG.js变量名语法异常:误匹配方括号等非预期字符
问题原因与解决方案
核心问题:正则范围[A-z]的错误
你定义的Varname规则[A-z0-9]+会匹配[和],本质是ASCII码中大写字母Z(ASCII 90)与小写字母a(ASCII 97)之间存在6个非字母符号,其中就包含[(91)、](93)。[A-z]的范围是从ASCII 65(A)到122(z),自然覆盖了这些符号,导致test[被当成完整变量名匹配,触发“变量不存在”的错误。
修复方案
将Varname规则的正则改为严格匹配大小写字母和数字:
Varname = [A-Za-z0-9]+
如果你的语言支持下划线作为变量名组成部分(符合多数编程语言惯例),可进一步调整为:
Varname = [A-Za-z_][A-Za-z0-9_]*
这样就能确保只匹配合法变量名,不会错误捕获[、]这类符号。
效果验证
修复后解析test["foobar"]时,PEG.js会正确识别test为变量名,随后进入属性访问逻辑处理["foobar"]部分,最终返回预期的"it worked"结果。
内容的提问来源于stack exchange,提问作者MfyDev
相关产品推荐
相关产品推荐

