VS代码:如何将片段占位符从camelCase转换为SCREAMING_SNAKE_CASE?

Bea*_*ith 10 visual-studio-code vscode-snippets

我想创建一个用于创建redux reducer的VS Code代码段.

我想有一个占位符片段,需要camelCase,然后将匹配的占位符转换为SCREAMING_SNAKE_CASE.

这是我尝试的片段,它不起作用:

"test": {
    "prefix": "test",
    "body": "${1} -> ${1/([a-zA-Z])(?=[A-Z])/${1:/upcase}_/g}"
},
Run Code Online (Sandbox Code Playgroud)

这产生了不期望的结果:

changeNetworkStatus -> changE_NetworK_Status
Run Code Online (Sandbox Code Playgroud)

期望的流量

  1. 类型test(片段名称)
  2. 点击tab以加载代码段.
  3. 输入changeNetworkStatus结果:

    changeNetworkStatus -> changeNetworkStatus
    
    Run Code Online (Sandbox Code Playgroud)
  4. 点击tab以获得预期的结果:

    changeNetworkStatus -> CHANGE_NETWORK_STATUS
    
    Run Code Online (Sandbox Code Playgroud)

如何更改我的代码段以获得所需的结果?

这是一个需要不同流程的相关解决方案.

Mar*_*ark 12

"camelCaseModify": {
    "prefix": "test",       
    "body": [

       //  first inefficient try, works for up to three words
       //  "${1} -> ${1/^([a-z]*)([A-Z])([a-z]+)*([A-Z])*([a-z]+)*/${1:/upcase}_$2${3:/upcase}${4:+_}$4${5:/upcase}/g}"

       "${1} -> ${1/([a-z]*)(([A-Z])+([a-z]+))?/${1:/upcase}${2:+_}$3${4:/upcase}/g}"           
    ],
    "description": "underscore separators"
},
Run Code Online (Sandbox Code Playgroud)

这适用于任何数量的camelCase单词,从一个到无穷大......

${2:+_}手段"如果有一个捕获组2然后追加下划线".如果没有第二个单词/捕获组,那么组3和组4将是空的,因为它们在捕获组2内.捕获组2始终是下一个单词(以一个大写开头,后跟至少一个小写字母) ).

例如,使用changeNetworkStatus:

Match 1

Full match    0-13    `changeNetwork`
Group 1.      0-6     `change`
Group 2.      6-13    `Network`
Group 3.      6-7     `N`
Group 4.      7-13    `etwork`

Match 2

Full match    13-19    `Status`
Group 1.      13-13     ``
Group 2.      13-19     `Status`
Group 3.      13-14     `S`
Group 4.      14-19     `tatus`

Match 3

Full match    19-19    ``
Group 1.      19-19    ``
Run Code Online (Sandbox Code Playgroud)

样本输出:

abcd -> ABCD
twoFish -> TWO_FISH
threeFishMore -> THREE_FISH_MORE
fourFishOneMore -> FOUR_FISH_ONE_MORE
fiveFishTwoMoreFish -> FIVE_FISH_TWO_MORE_FISH
sixFishEelsSnakesDogsCatsMiceRatsClocksRocks -> SIX_FISH_EELS_SNAKES_DOGS_CATS_MICE_RATS_CLOCKS_ROCKS
Run Code Online (Sandbox Code Playgroud)

使用regex101.com确实有助于可视化正在发生的事情!