lukaszpolowczyk
lukaszpolowczyk

Reputation: 755

VSCode Code-Snippets transform: downcase and capitalize at the same time

I have this:

${1/([A-Z]*)(?:_)([A-Z]+)*/${1:/downcase}${2:/downcase}/g}

How to make use downcase and capitalize on the same (2) group?

${1/([A-Z]*)(?:_)([A-Z]+)*/${1:/downcase}${2:/downcase/capitalize}/g}

I want to tansform ZXC_ASD to zxcAsd.

Upvotes: 5

Views: 3217

Answers (2)

Mark
Mark

Reputation: 180695

Apparently coming to vscode v1.58 is a /camelcase modifier. So your case is as easy as

"${1/(.*)/${1:/camelcase}/}"

camelCase transform example

Tested in the Insiders Build. See Add a camelCase transform for Snippet variables. See also https://stackoverflow.com/a/51228186/836330 for another example.


Old answer:

Using the undocumented (see Snippet regex: match arbitrary number of groups and transform to CamelCase) /pascalcase transform, it is quite easy:

"${1/([A-Z]*)(?:_)([A-Z]+)*/${1:/downcase}${2:/pascalcase}/g}"

as the /pascalcase will do both the /capitalize and the /downcase at once.

Upvotes: 2

wp78de
wp78de

Reputation: 18950

Try it like this:

"camelCaseSnail": {
"scope": "javascript,typescript",
    "prefix": "log",
    "body": "${1/([A-Z]*)(?:_)(?:([A-Z])([A-Z]+))*/${1:/downcase}${2:/capitalize}${3:/downcase}/g}"
}

enter image description here

Basically, I've changed the second capture group ([A-Z]+)* to a non-capture group that has two inner capture groups (?:([A-Z])([A-Z]+))*, a single letter for camel-case and the rest, which I refer in the replace/transform part: /downcase}${2:/capitalize}${3:/downcase}/

Upvotes: 6

Related Questions