web-dev-qa-db-ja.com

VSコード:スニペットプレースホルダーをキャメルケースからSCREAMING_SNAKE_CASEに変換する方法

Reduxレデューサーを作成するためのVSコードスニペットを作成したいと思います。

CamelCaseを期待するプレースホルダーを含むスニペットを用意し、一致するプレースホルダーをSCREAMING_SNAKE_CASEに変換します。

これが機能していない私の試したスニペットです:

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

これにより、望ましくない結果が生成されます。

changeNetworkStatus -> changE_NetworK_Status

望ましい流れ

  1. タイプtest(スニペットの名前)
  2. ヒット tab スニペットをロードします。
  3. changeNetworkStatusと入力すると、次の結果になります。

    changeNetworkStatus -> changeNetworkStatus
    
  4. ヒット tab 期待される結果を得るには:

    changeNetworkStatus -> CHANGE_NETWORK_STATUS
    

スニペットコードを変更して目的の結果を得るにはどうすればよいですか?

別のフローを必要とする関連ソリューションがあります。

15
Beau Smith
"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"
},

これは、1から無限大までの任意の数のcamelCaseワードで機能します...

${2:+_}は、「キャプチャグループ2がある場合、アンダースコアを追加する」ことを意味します。 2番目のワード/キャプチャグループがない場合、グループ3と4はキャプチャグループ2内にあるため、とにかく空になります。キャプチャグループ2は常に次のワードです(1つの大文字で始まり、少なくとも1つの小文字が続く) )。

たとえば、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    ``

出力例:

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

regex101.com を使用すると、実際に起こっていることを視覚化するのに役立ちます!

17
Mark