【发布时间】:2017-09-09 12:03:37
【问题描述】:
当我看到这个表达式时,我正在寻找 javascript 中一个问题的解决方案,即将一个字符串解析为其组成名称、运算符和括号:
return accept(")") ? _|_ : e;
_|_ 是什么?那是使用节点的_ 功能吗?我已经查找了文档,但没有找到任何文档。
当我自己尝试使用它时,会发生这种情况:
> 5
5
> true ? _|_ : 0
ReferenceError: _ is not defined
at eval:1:1
at eval
at n.<anonymous>
澄清一下,变量_ 没有在代码中的任何地方定义。
这是在 Node v8.1.3 上运行的,但在 Chrome 原生浏览器 JS 上也可以正常工作。
代码如下:
function tokenise(string) {
const tokens = string.match( /[a-z]+|\(|\)|[!#$%&*+\-\/<=>@^_.,;]+/gi ) || [];
const accept = s => s===tokens[0] && tokens.shift() ;
const unaccept = s => s!==tokens[0] && tokens.shift() ;
const singles = (e) => ( e = unaccept(")") ) ? [ e, ...brackets() ] : [] ;
const brackets = (e) => accept("(") ? ( e = brackets(), accept(")") || _|_ , [ e, ...brackets() ] ) : singles() ;
try { let e = brackets(); return accept(")") ? _|_ : e ; }
catch(_) { return null; }
}
【问题讨论】:
标签: javascript node.js syntax