正则表达式CamelCase文件名,但也删除扩展名

时间:2017-02-21 11:00:54

标签: regex sublimetext

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

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

但它主要是关于这一部分:(^|-|\.)(?!ts)(.?)https://regex101.com/r/zgiQZ0/1

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

我得到了这个,得到AppUserIconComponent.ts

我需要的不是忽略((?!ts))而是我需要将其过滤掉/移除.ts部分。

我在使用此部分时遇到问题:|/\U\2\E/g,因为这是将其转换为Caps的原因。任何在线正则表达式解析器都不接受它(参见:https://regex101.com/r/zgiQZ0/2)。 另外,我不确定如果我的结果在大写之后我应该正则表示。

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

(如果您有兴趣,以下是整个片段:)

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

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

1 个答案:

答案 0 :(得分:1)

我建议使用这个:

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

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

正则表达式是:

  • (?:\.ts$)未捕获组以匹配文件名末尾的.ts
  • |
  • (?:^|-|\.)非捕获组以匹配文件名的开头,-.字符,后跟
    • (.)将任何单个字符捕获到捕获组1
  • /开始替换
    • \u大写下一个字符
    • \1之前捕获到捕获组1中的字符
  • /替换结束
  • g全球旗帜不止一次匹配