【发布时间】:2019-08-21 15:38:03
【问题描述】:
我想计算一段 javascript 代码中的语句数。这是为了评估代码对于编程挑战有多短(如果有更好/更简单的方法来评估代码,我也有兴趣听听)。
出于本次评估的目的,我想假设语句是能够在其中执行操作的任何内容,例如:
let values = ['test 1', 'test 2'];
for(let i in values) {
let object = {
a: i%3,
b: Math.floor(i/3),
c: i*2
};
let another = {test: 0 || 4};
let something = values[i];
let otherSomething = getSomeValues(object[a], object[b]);
setSomeValues(object[a], object[c]);
for(let j = 0; j < 5; i++) if(i < j) break;
}
有相当多的语法需要涵盖,所以理想情况下,如果有可用的库,我想用一个库来做到这一点 - 我的谷歌搜索无法找到任何非常合适的东西。
我尝试编写一个正则表达式来匹配语句之间所有可能的中断,但这很快就会变得混乱:
[\n;]|\)[ \w]|[{,][\s\w]+:\s*|[{}]
这是我一直在使用的the regexr 的链接。分解:
-
[\n;]- 匹配换行符或分号,这是开始新语句的正常方式 -
\)[ \w]- 匹配右括号后的语句,例如if (something) return; -
[{,][\s\w]+:\s*- 匹配对象中键值对的键 -
[{}]- 匹配块的左括号和右括号
我还删除了所有长度为零的匹配项,因为语句不能为空。
正如我所说,理想情况下我更喜欢图书馆,但我想就我的方法以及我是否有大多数边缘情况征求一些意见。
【问题讨论】:
-
我无法想象正则表达式足够强大以应对所有情况,因此:stackoverflow.com/questions/14355910/…
-
@LeeTaylor 这似乎是一个与 C# 相关的问题,你能更具体地说明你指的是什么吗?
-
我怀疑写一个简单的正则表达式在这里会有很大帮助。如果您想要准确的结果,几乎可以肯定,您需要编写解析器和词法分析器。试试this。
-
见esprima.org/demo/parse.html我相信这是用js写的。
-
嗯,请求库是off-topic(见第4 条),但我想有很多工具。您可以四处搜索并查看我上面提到的那个——我不知道他们的名字可能会在我脑海中浮现。我主要想提一下,写一个正则表达式会非常困难,并指出你要做个人研究。
标签: javascript regex static-analysis