Regex CamelCase 文件名,但也删除扩展名

Regex CamelCase filename, but also remove extension

我有这个用于 Sublime Text 片段的正则表达式:

${TM_FILENAME/(^|-|\.)(?!ts)(.?)|/\U\E/g}

不过主要是这部分:(^|-|\.)(?!ts)(.?) (https://regex101.com/r/zgiQZ0/1)

我想要的是将app-user-icon.component.ts转换成AppUserComponent

我走到这一步,得到 AppUserIconComponent.ts

我需要的不是忽略 ((?!ts)) 它而是需要过滤它 out/remove .ts 部分。

我不知道如何处理这部分:|/\U\E/g,因为这就是将它转换为大写字母的原因。并且任何在线正则表达式解析器都不接受它(参见:https://regex101.com/r/zgiQZ0/2)。 我也不确定是否应该在大写后对结果进行正则表达式。

删除 .ts 部分在代码段的另一部分起作用:(.*)[.](.*) 虽然不确定将其放在这个表达式中的什么位置。

(如果您有兴趣,这里是整个片段:)

<snippet>
  <content><![CDATA[
import { Component } from '@angular/core';

@Component({
  selector: '${TM_FILENAME/(.*)(.component)[.](.*)//g}',
  templateUrl: '${TM_FILENAME/(.*)[.](.*)//g}.html'
})
export class ${TM_FILENAME/(^|-|\.)(?!ts)(.?)|/\U\E/g} {
  constructor() {}
  [=10=]
}]]></content>
  <tabTrigger>ng2-component</tabTrigger>
  <scope>source.ts,source.tsx,source.js</scope>
  <description>Angular 2 Component Snippet</description>
</snippet>

我建议使用这个:

<snippet>
  <content><![CDATA[
import { Component } from '@angular/core';

@Component({
  selector: '${TM_FILENAME/(.*)(.component)[.](.*)//g}',
  templateUrl: '${TM_FILENAME/(.*)[.](.*)//g}.html'
})
export class ${TM_FILENAME/(?:\.ts$)|(?:^|-|\.)(.)/\u/g} {
  constructor() {}
  [=10=]
}]]></content>
  <tabTrigger>ng2-component</tabTrigger>
  <scope>source.ts,source.tsx,source.js</scope>
  <description>Angular 2 Component Snippet</description>
</snippet>

正则表达式在哪里:

  • (?:\.ts$) 未捕获组以匹配文件名末尾的 .ts
  • |
  • (?:^|-|\.) 非捕获组以匹配文件名的开头,一个 -. 字符,后跟
    • (.) 将任意单个字符捕获到捕获组 1
  • /开始更换
    • \u下一个字符大写
    • </code> 之前捕获到捕获组 1 中的字符</li> </ul></li> <li><code>/替换结束
    • g 全局标志匹配多次