【问题标题】:Eslint combining naming conventionsEslint 结合命名约定
【发布时间】:2022-01-27 05:23:01
【问题描述】:

我想结合 snake_casePascalCase 命名约定。因此,声明 class 其名称必须严格符合以下格式:Pascal_SnakePascal_Snake_Pascal_EtcOnlyPascalPascal

这就是我在esling.config 中尝试做的事情:

"@typescript-eslint/naming-convention": [
  {
      selector: "class",
      format: null,
      custom: {
          regex: "([A-Z]\\w*_?[A-Z]\\w+)|([A-Z]\\w*[A-Z]?\\w+)",
          match: true,
      },
  },
]

很遗憾,这个regex 并不严格。我想要的是:

  1. _ 之后必须始终至少有一个大写字母。
  2. 如果您不提供 _ — 您必须按照 PascalCase 格式命名类。

如何获得?

【问题讨论】:

    标签: regex eslint typescript-eslint


    【解决方案1】:

    使用\w可以匹配大小写字符和_

    您可以在匹配可选重复组中的大写字符 A-Z 之前匹配可选下划线。

    (如果需要,请注意对反斜杠进行双重转义。)

    \b[A-Z][a-z]*(?:_?[A-Z][a-z]*)*\b
    

    Regex demo

    如果您不想匹配单个 A 或 AA,则可以将小写字符重复 1 次以上。

    \b[A-Z][a-z]+(?:_?[A-Z][a-z]+)*\b
    

    【讨论】:

    • 如何在第一个正则表达式中留下像SomethingSpeical1Something_Special123 这样的数字? (PascalCase 允许)
    • @DenisRybkin 您可以将它们添加到字符类以允许混合字符 a-z 和数字 \b[A-Z][a-z0-9]*(?:_?[A-Z][a-z0-9]*)*\b 或在可选字符 a-z 之后添加可选数字,例如 \b[A-Z][a-z]*[0-9]*(?:_?[A-Z][a-z]*[0-9]*)*\b 参见 regex101.com/r/tY44V7/1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 2018-09-28
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多