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
test
(nom de l'extrait)tapez changeNetworkStatus
pour obtenir:
changeNetworkStatus -> changeNetworkStatus
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é?
"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!