2017-02-21 119 views
0

我有这样的正则表达式中使用的崇高文本片段:正则表达式驼峰文件名,也删除扩展

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

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

我想要什么被转换成app-user-icon.component.tsAppUserComponent

我能走到今天,并获得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

我会建议使用此:

<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全局标志来匹配不止一次
相关问题