【问题标题】:RegEx for jsDoc comments用于 jsDoc 注释的正则表达式
【发布时间】:2020-06-02 18:02:29
【问题描述】:

找不到任何可用的 RegExp 示例来匹配文本文件中的所有 jsDoc 注释块。

基本上,它需要找到所有满足以下规则的块:

  • /** 开头,后跟一个或多个换行符
  • */结尾
  • 块内可以包含任何内容,包括代码示例和 HTML。

我尝试了jsdoc-regex的代码,但没有成功:

/[^\S\r\n]*\/(?:\*{2})([\W\w]+?)\*\/([\W\w]+?)?(?=\s+\/\*{1,2}|$)/g;

注意:

我正在解析通用文本文件,不一定是 JavaScript,所以我不能使用像 Esprima 这样的 JS 解析器。

更新:

为了改写我的问题,我一直在尝试定义一个 RegEx 规则,该规则说表达式必须以 */ 结尾,而在它之前可以有任何东西(在块内),即在这种情况下意味着任何东西除了*/之外的任何东西。

解决方案:

感谢@m93a 的回答,他的实现已成为decomment 的重要补充,选项ignore

【问题讨论】:

  • 你能用像esprisima这样的js解析器吗?
  • @DanielA.White 不,我不能为此使用其他解析器,我只能在我的示例中使用 RegExp,它是通用的,并且可以有效地匹配任何内容。 jsDoc 只是我遇到的一个例子。
  • 你能告诉我们更多你尝试过的东西吗?似乎您希望有人会给您答案,而不是尝试学习 RegExp 并尝试实现您自己的。这不是这个网站的目的。
  • @EzequielMuns 我从一开始提供的链接中复制了正则表达式。这就是我尝试过的方法,但没有奏效。

标签: javascript regex jsdoc


【解决方案1】:

构建您的表达式:教程

  1. / / – 空表达式

  2. / \/\*\* / - 匹配/**(转义)

  3. / \/\*\* \s*\n / - 后跟换行符(空格字符可能在前面)

  4. / \/\*\* \s*\n \*\/ / - 匹配*/(转义)

  5. / \/\*\* \s*\n ( ) \*\/ / – 添加群组

  6. / \/\*\* \s*\n ( [^\*] ) \*\/ / - 该组可能包含除*之外的任何内容

  7. /\/\*\*\s*\n([^\*]|())\*\/@987654 或另一组>

  8. /\/\*\*\s*\n([^\*]|(\*))))@787654374@787654374 *

  9. / \/\*\* \s*\n ( [^\*] | ( \* (?!\/) ) ) \*\/ / –但后面没有/

  10. / \/\*\* \s*\n ( [^\*] | ( \* (?!\/) ) ) * \*\/ @ 987654405@ – 重复整件事

  11. /\/\*\*\s*\n([^\*]|(\*(?!\/)))*\*\//Tadaa!很漂亮,不是吗?

【讨论】:

  • 第一个要求是什么:...,followed by one or more line breaks?
  • 感谢您,这为decomment 选项ignore 增加了宝贵的内容。
  • @m93a,它适用于大多数情况。但是,有时,注释块以**/ 而不是*/ 结尾。在这种情况下,它会卡住。您必须按 ^C 退出该过程。我遇到此问题的代码示例:/** * My Component (new line here) **/ export default class MyClass extends React.Component { }
  • @David 是的,实际上有一个错误,感谢您发现它!现在表达式成功地忽略了任何* 后面没有/。请注意,它仍然不适用于您的字符串,因为 OP 特别要求 /** 序列必须后跟换行符。为了使它适合您,您必须删除第 3 步。
  • 谢谢@m93a!它对我也很有效。我还需要\n,它刚刚在我写评论时被 StackOverflow 删除了。
【解决方案2】:

除了@m39a 的回答。如果您使用的语言或正则表达式库不支持环视。你可以使用这个: \/\*\*\s*\n([^\*]|\*[^\/])*\*\/

在 Regex101 中查看:https://regex101.com/r/TMr78R/1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2014-12-17
    • 2014-01-29
    • 2018-05-08
    • 2011-06-12
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多