我有这个正则表达式用于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>
答案 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
全球旗帜不止一次匹配