web-dev-qa-db-fra.com

VS Code: Comment convertir un espace réservé d'extrait de camelCase en SCREAMING_SNAKE_CASE?

Je voudrais créer un extrait de code VS pour créer des réducteurs redux.

Je voudrais avoir un extrait avec un espace réservé qui attend camelCase, puis transformer un espace réservé correspondant en SCREAMING_SNAKE_CASE.

Voici ma tentative d'extrait de code, qui ne fonctionne pas:

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

Ce qui produit un résultat non souhaité:

changeNetworkStatus -> changE_NetworK_Status

Débit souhaité

  1. tapez test (nom de l'extrait)
  2. frappé tab pour charger l'extrait.
  3. tapez changeNetworkStatus pour obtenir:

    changeNetworkStatus -> changeNetworkStatus
    
  4. frappé tab pour obtenir le résultat attendu de:

    changeNetworkStatus -> CHANGE_NETWORK_STATUS
    

Comment puis-je changer mon code d'extrait pour obtenir le résultat souhaité?

Voici une solution connexe qui nécessite un flux différent.

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"
},

Cela fonctionne avec n'importe quel nombre de mots camelCase, de un à l'infini ...

Le ${2:+_} signifie "s'il existe un groupe de capture 2, ajoutez un trait de soulignement". S'il n'y a pas de deuxième groupe Word/capture, les groupes 3 et 4 seront de toute façon vides car ils font partie du groupe de capture 2. Le groupe de capture 2 est toujours le mot suivant (qui commence par une majuscule et suivi d'au moins une petite lettre ).

par exemple, en utilisant 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    ``

Exemple de sortie:

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

Utiliser regex101.com aide vraiment à visualiser ce qui se passe!

17
Mark