在Visual Studio代码段中,我正在编写将蛇形字符串转换为 Camel 形的示例。

docs我知道语法是

'${' var '/' regex '/' (format | text)+ '/' options '}'

所以我想出了这个:
${TM_FILENAME_BASE/([a-z])([a-z]*)_+([a-z])([a-z]*)_+/${1:/upcase}$2${3:/upcase}$4/}

但是,此代码仅适用于具有2个元素的字符串(例如“carrot_cake”),而我想处理具有任意数量的元素(“blueberry_pie_with_a_cup_of_coffee”)的字符串。

我猜想'regex''format'需要某种递归,但是我不知道该怎么做。

一个如何匹配任意数量的模式出现?

最佳答案

要将任意数量的由“_”分隔的单词转换为CamelCase,请尝试:

编辑:在2018年10月(但尚未添加到2020年2月的摘要语法文档中)vscode添加了/pascalcase转换,请参见commit。我已经修改了下面的代码以使用/pascalcase转换。但是,它仅适用于CamelCase的some_file => SomeFile类型。

但是它可以使用许多字符作为分隔符,所有这些都可以工作:

blueberry_pie_with_a_cup_of_coffee
blueberry-pie-with-a-cup-of-coffee
blueberry-pie-with_a-cup-of_coffee
blueberry-pie-with.a-cup-of.coffee
blueberry*pie-with.a*cup-of.coffee
blueberry*[email protected]*cup1of.coffee
blueberry*[email protected]*cup1of.coffee
"camelCase": {
    "prefix": "_cc",
    "body": [
            // "${TM_FILENAME_BASE/([a-z]*)_+([a-z]*)/${1:/capitalize}${2:/capitalize}/g}"

            "${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}"
        ],
        "description": "Transform to camel case"
    },
carrot_cake.txt-> CarrotCakeblueberry_pie_with_a_cup_of_coffee.js-> BlueberryPieWithACupOfCoffee
[我假设CamelCase是您想要的形式,还有其他形式,例如camelCase。]

对于 camelCase :
"${TM_FILENAME_BASE/([a-z]*)[-@_.*0-9]+([a-z]*)/$1${2:/capitalize}/g}"

将所需的分隔符列表放在[-@_.*0-9]+部分中。 +量词允许您使用carrot--cake例如-多个分隔符
字之间。感谢使用正则表达式的[list the separators]部分的其他答案。

请注意,结尾处的“g”标志为您完成了大部分工作,但无论有多少匹配项都超出了明确捕获的两个匹配项。

我将捕获组保留为([a-z]*),就如您所愿。您可能需要使用([A-Za-z0-9]*)以获得更大的灵活性。

关于regex - 片段正则表达式: match arbitrary number of groups and transform to CamelCase,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48104851/

10-10 09:43