Код VS: Как преобразовать заполнитель фрагмента из camelCase в SCREAMING_SNAKE_CASE?
Я хотел бы создать фрагмент кода VS для создания редукционных редукторов.
Я хотел бы иметь фрагмент с заполнителем, который ожидает camelCase, а затем преобразовать соответствующий заполнитель в SCREAMING_SNAKE_CASE.
Вот мой попытанный фрагмент, который не работает:
"test": {
"prefix": "test",
"body": "${1} -> ${1/([a-zA-Z])(?=[A-Z])/${1:/upcase}_/g}"
},
Который дает нежелательный результат:
changeNetworkStatus -> changE_NetworK_Status
Желаемый поток
- тип
test
(название фрагмента) - нажмите вкладку, чтобы загрузить фрагмент.
тип
changeNetworkStatus
в результате:changeNetworkStatus -> changeNetworkStatus
нажмите вкладку, чтобы получить ожидаемый результат:
changeNetworkStatus -> CHANGE_NETWORK_STATUS
Как я могу изменить мой фрагмент кода, чтобы получить желаемый результат?
1 ответ
"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"
},
Это работает с любым количеством слов 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 ``
Пример вывода:
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
Использование https://regex101.com/ действительно помогает визуализировать происходящее!