Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用正则表达式计算typescript文件中的所有函数、箭头函数和类方法_Javascript_Regex_Typescript - Fatal编程技术网

Javascript 使用正则表达式计算typescript文件中的所有函数、箭头函数和类方法

Javascript 使用正则表达式计算typescript文件中的所有函数、箭头函数和类方法,javascript,regex,typescript,Javascript,Regex,Typescript,我正在实现一个函数,它接收一个文件路径作为参数,并返回文件中存在的普通函数、箭头函数、类方法、setter和getter的总数 由于有多种方法可以声明类方法(例如,public methodName(参数1,…),private methodName(…),因此我考虑使用正则表达式来检索类方法的数量。例如: const countClassMethods = (typescriptFileString: string): number => { return typescriptF

我正在实现一个函数,它接收一个文件路径作为参数,并返回文件中存在的普通函数、箭头函数、类方法、setter和getter的总数

由于有多种方法可以声明类方法(例如,
public methodName(参数1,…),private methodName(…)
,因此我考虑使用正则表达式来检索类方法的数量。例如:

const countClassMethods = (typescriptFileString: string): number => {
    return typescriptFileString.match('REGULAR_EXPRESSION_TO_COUNT_CLASS_METHODS')?.length || 0;
}

const extractAllFunctionOcurences = (filePath: string): number => {
    const typescriptFileString = fs.readFileSync(filePath, 'utf8');

    const quantityOfNormalFunctions = countNormalFunction(typescriptFileString);
    const quantityOfArrowFunctions = countArrowFunctions(typescriptFileString);
    const quantityOfClassMethods = countClassMethods(typescriptFileString);
    const quantityOfGettersAndSetters = countGettersAndSetters(typescriptFileString);
    return quantityOfNormalFunctions + quantityOfArrowFunctions + quantityOfClassMethods + quantityOfGettersAndSetters;
}
我的问题是:

1) 哪一个是用于从typescript文件中标识类方法的适当正则表达式

2) 如果有更好的方法来识别它们,它们是什么

Ps:我试着在谷歌上寻找这个,但找不到满意的答案。 提前谢谢

编辑:到目前为止,我让当前正则表达式为类方法工作:
“myFileString.match(/(public | private | protected)*\s{0,}[^\n\r\t\v\0\s]+\(\s*([^)]+?)\s*\(\s*:\s*[^\n\r\t\v\0\s]+)*\s*{/igm)

如果我能找到更好的,我会更新它

编辑2:根据@Timo的建议,这是我的最终代码,以防有人感兴趣:

'use strict';
import fs from 'fs';
import ts from 'typescript';

const extractAllFunctionOcurences = (filename: string): number => {

    let numOfFunctions = 0;
    const delintNode = (node: ts.Node) => {
        switch (node.kind) {
            case ts.SyntaxKind.FunctionDeclaration:
            case ts.SyntaxKind.FunctionKeyword:
            case ts.SyntaxKind.FunctionExpression:
            case ts.SyntaxKind.ArrowFunction:
            case ts.SyntaxKind.ClassDeclaration:
            case ts.SyntaxKind.MethodDeclaration:
            case ts.SyntaxKind.GetAccessor:
            case ts.SyntaxKind.SetAccessor:
                numOfFunctions += 1;
        }
        ts.forEachChild(node, delintNode);
    };

    if (!fs.existsSync(filename)) return 0;

    const sourceFile = ts.createSourceFile(
        filename,
        fs.readFileSync(filename).toString(),
        ts.ScriptTarget.ES2015,
        true
    );

    delintNode(sourceFile);

    return numOfFunctions;
};

你最好还是使用抽象语法树(如果它不响的话,用谷歌搜索这个词)来考虑太多的边缘情况:
constfoo=()/*functionprivate()=>*/=>{}
你能把你自己的答案变成答案的形式并接受它吗?