Фрагмент VSCode, преобразовать строчную строку, разделенную подчеркиванием, в CamelCase?

Я пишу настраиваемый фрагмент кода в VSCode, чтобы облегчить определение методов настраиваемого класса. Мне нужно иметь возможность ввести строку «formatted_like_this» и преобразовать регулярное выражение в эту строку в определенных местах, чтобы она стала «FormattedLikeThis»?

Пользовательский фрагмент, который должен быть написан на php.json: (см. «НЕОБХОДИМА ПОМОЩЬ С REGEX ЗДЕСЬ», где я борюсь)

"New Custom Class Method For Variable": {
    "prefix": "contcmpffv",
    "body": [
        "protected $$1 = null;",
        "public function get${NEED HELP WITH REGEX HERE}()",
        "{",
        "\t$0",
        "}"
    ],
    "description": "Controller Class Method Public Function For Variable"
}

Мой желаемый рабочий процесс: 1. введите contcmpffv 2. нажмите Enter при появлении запроса с соответствующим фрагментом 2. фрагмент подсказки мне за 1 доллар

Желаемый результат (ввод «test_input_string» при запросе $ 1):

protected $test_input_string = null;
public function getTestInputString()
{
    *cursor resolves here (due to $0)*
}

person micomec    schedule 02.12.2019    source источник
comment
Я не уверен насчет пользовательских фрагментов Visual Studio, но в javascript будет работать что-то вроде этого: ('formatted_like_this').split('_').map((el)=>el.charAt(0).toUpperCase() + el.slice(1)).join(''). Не уверен, поможет ли это, но, может быть, вы сможете написать что-то подобное в visual studio?   -  person Berci    schedule 02.12.2019
comment
@Berci К сожалению, я не могу использовать строковые функции JavaScript для этой цели, но спасибо за быстрый ответ!   -  person micomec    schedule 02.12.2019


Ответы (1)


Пытаться:

"body": [
    "protected $$1 = null;",
    "public function get${1/(.*)/${1:/pascalcase}/}()",
    "{",
    "\t$0",
    "}"
],

Он использует недокументированное преобразование pascalcase, которое существует уже некоторое время. В этом случае он сделает всю работу за вас.

Вот что вы могли бы использовать, если бы не было pascalcase:

"public function get${1/([^_]*)_*/${1:/capitalize}/g}()",
person Mark    schedule 02.12.2019
comment
Большое спасибо, Марк, это сработало отлично! Я действительно ценю твою помощь. - person micomec; 02.12.2019
comment
гениальный второй вариант. Это определенно больше моего понимания чтения выражений Regex. Есть идеи, каким будет регулярное выражение для [this_camel_case = ›thisCamelCase] ​​(первое слово начинается с lcase, все остальные слова начинаются с ucase)? - person micomec; 03.12.2019
comment
См. Мой ответ здесь для camelCase: stackoverflow.com/questions/48104851/ - person Mark; 03.12.2019