javascript - 将所有函数与之前的文档匹配
问题描述
我正在编写一个简单的 nodejs 函数来循环代码库、读取所有文件、查找 javascript 函数并报告该函数是否有为其编写的文档。
我编写了一个检测所有函数(及其上下文)的函数,我还编写了一个单独的函数来检测文档块:
(\/\*\*([\S\s]*?)(?:\s)?\*\/)
这应该匹配以下格式的任何文档格式:
/**
* @description - some description
*/
基本上我不知道如何加入它们,我想报告有和没有附加文档的函数:
已在 regex101 中进行测试:https ://regex101.com/r/WGqfm8/9/
解决方案
首先,您的评论匹配正则表达式可以简化为:
/\/\*\*(\S|\s)*?\*\//g
但如果您要搜索多个,这可能会更好:
/\/\*\*(?:(\S|\s)(?!\*\/))*?(\S|\s)\*\//g
其次,您可能必须分两部分执行此操作:
第 1 步:{string}.match()
用于创建所有匹配函数的数组。
第 2 步:使用{string}.split()
删除所有匹配的函数,留下其余代码。然后你也可以用.map()
它来分解它。
像这样的东西:
var functions = code.match(funcRegex);
var restOfCode = code.split(funcRegex).map(c=>c.match(/\/\*\*(?:(\S|\s)(?!\*\/))*?(\S|\s)\*\//g));
注意: 的每一项restOfCode
将是一个找到的评论数组,最后一个应该是函数之前的那个。例如,对于函数体functions[0]
,您将检查数组中的最后一项是否restOfCode[0][restOfCode[0].length-1]
以“/**”和“*/”开头和结尾。
警告:大多数正则表达式无法防止某些情况,例如这种情况或类似情况:
var b=`
function(){ }
`;
没有正则表达式对于您想要做的事情是万无一失的,但可以帮助将代码分成几部分以正确解析。对于简单的情况,虽然它可能没问题。
顺便说一句:您确实要求“加入他们两个”,但在您的问题中没有明确给出两个正则表达式。是的,我知道它们已经合并的链接,但是在您的问题中应该很清楚。
由于用正则表达式解析函数体是一件傻事,可以这么说,这里至少将注释与似乎是函数开始的开始相匹配:
/^(\/\*\*(?:(?:\S|\s)(?!\*\/))*?(?:\S|\s)?\*\/\s*)?((?:(?:const|var|let).*{.*})?[^}\n]*(?:\(.*\).*{))/gm
https://regex101.com/r/WGqfm8/15
第 1 组返回文档注释(如果存在),第 2 组返回函数起始行。
推荐阅读
- python - 如何使用 dunder 方法进行对象比较
- python - 请求 socialblade.com 使用超级错误获取 403
- c - 为什么我的 setitimer() 没有在 Linux 环境中调用 SIGALRM?
- android - 当输入图像相同时,ImageView 会再次重做所有过程吗?
- node.js - 使用 Node 设置系统变量
- typescript - 在使用打字稿做出本机反应时,在redux中出现类型错误
- flutter - 如何像这张图片一样在颤动中创建具有复杂标题的表?
- arm64 - 我们如何在 ARM 中存储大的十进制/十六进制值?
- elasticsearch - 如何编写一个按字段聚合的 Elasticsearch 查询,以及每个字段的聚合?
- android - Fluter 应用程序在 Android 设备上没有任何日志就崩溃了