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
全局标志匹配多次
我有这个用于 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
全局标志匹配多次