找到没有methodOf(正则表达式)

时间:2017-03-14 22:54:04

标签: angularjs regex format phpstorm

我已经构建了一个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

我会继续尝试,但也许有人有解决方案,并愿意分享。 非常感谢任何帮助!

2 个答案:

答案 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来匹配换行符。