Reputation: 755
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
Reputation: 180695
Apparently coming to vscode v1.58 is a /camelcase
modifier. So your case is as easy as
"${1/(.*)/${1:/camelcase}/}"
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
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}"
}
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