我已经构建了一个angular1应用程序,它在许多控制器等中有数千种方法。 在开发过程中,我在创建文档注释时并不是太小心。我已经花了一夜的时间来修复格式,以便再次生成文档。
现在我收到此错误消息:Don't know how to format @ngdoc: method
。
我从其他相似的问题中了解到,当@methodOf
属性丢失时,会发生(或可能发生)。错误消息未说明 发生这种情况。
所以我想使用IDE(PhPStorm)搜索功能和正则表达式查找所有那些格式不正确的ngdoc注释。
这是我提出的当前表达式:
\/\*\*\s*\n\s\*\s@ngdoc method\n(\s\*.*(?<!methodOf)\n)*\s\*\/
从这些评论中,我希望只找到第二个:
/**
* @ngdoc method
* @name app.admin:AuditLogController#auditsWatch
* @methodOf app.admin:AuditLogController
*/
/**
* @ngdoc method
* @name app.admin:AuditLogController#auditsWatch
*/
/**
* @name app.admin:AuditLogController#auditsWatch
*/
在此测试:https://regex101.com/r/wfIiZJ/1
所以基本上我希望能找到任何评论,从一开始
/**
和@ngdoc method
以*/
结尾,中间没有methodOf
。
我最接近的是这一个:
\/\*\*\s\n*.*(?!methodOf)\n*.*\n\s\*\/
https://regex101.com/r/qpt8G7/1
我会继续尝试,但也许有人有解决方案,并愿意分享。 非常感谢任何帮助!
答案 0 :(得分:1)
好的,就在我发布问题并从头开始思考之后,我得到了解决方案。
正则表达式如下所示:
(\/\*\*\s*\n\s*\*\s@ngdoc method\n)(((\s\*\s)(?!@methodOf).*\s*\n)*)\s*\*\/
https://regex101.com/r/Ep50XQ/1/
我把它分成几组。
(\/\*\*\s*\n\s*\*\s@ngdoc method\n)
找到
/**
* @ngdoc method
所以记录方法的任何评论。
(\s\*\s)
处理一个新的注释行,包括可能的空格,一个*,后跟更多的空格。
这就是我之前遇到的罪魁祸首。 我需要了解当前游标的位置。
(?!@methodOf)
确保该行不以@methodOf
开头
合并(((\s\*\s)(?!@methodOf).*\s*\n)*)
确保评论中的一行(不以@methodOf
开头)除了(.*
)之外可以包含任何字符,可能还有一些空格(\s
)并以换行符结束。这可以重复任意次(*
)。
最后一部分
\s*\*\/
是:*/
结束注释块和正则表达式。
感谢StackOverflow帮助我思考。 也许它可以帮助别人。
答案 1 :(得分:0)
您可以在此处使用tempered greedy token:
(?s)\/\*\*\s*\*\s*@ngdoc method\n(?:(?!\*\/|methodOf).)*\s\*\/
^^^^^^^^^^^^^^^^^^^^^^^
请参阅regex demo
模式匹配:
(?s)
- 使.
能够匹配换行符\/\*\*
- 文字/**
子字符串\s*\*\s*
- 包含0 +空格的*
@ngdoc method\n
- 文字@ngdoc method
子字符串后跟换行符(?:(?!\*\/|methodOf).)*
- 与任何char匹配的调和贪婪令牌,0次或更多次,这不是*/
文字字符序列或methodOf
子字符串\s
- 空白\*\/
- 一个*/
字面字符序列。请注意,如果LF之前可能有CR,您可以考虑使用\R
或\r?\n
来匹配换行符。