gpt4 book ai didi

regex - 正则表达式片段 : match arbitrary number of groups and transform to CamelCase

转载 作者:行者123 更新时间:2023-12-01 20:21:14 24 4
gpt4 key购买 nike

在 Visual Studio 代码片段中,我正在编写我想要将蛇形大小写字符串转换为驼峰大小写。

来自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' 需要某种递归,但我不知道该怎么做。

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

最佳答案

更新

vscode v1.75 添加了一个转换为驼峰式命名 命令,因此您可以选择结果并触发该命令,而不是片段转换。仅供引用。

<小时/>

更新

vscode v1.58 添加了 /camelcase 转换。这使得您的用例现在变得非常简单。

“${1/(.)(.*)/${1:/upcase}${2:/camelcase}/}”

blueberry_pie_with_a_cup_of_coffee转到BlueberryPieWithACupOfCoffee

<小时/>

"${1/(.*)/${1:/camelcase}/}"//捕获整个内容

blueberry_pie_with_a_cup_of_coffee转到blueberryPieWithACupOfCoffee

vscode 的实现使用此正则表达式:[a-zA-Z0-9],因此除这些字符之外的任何字符都将被视为分隔符 - 并且以下“单词”将大写。

<小时/><小时/>

上一个答案::

要将任意数量的“_”分隔的单词转换为驼峰命名法,请尝试:

编辑: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*pie@with.a*cup1of.coffee
blueberry*pie@with.a*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 -> CarrotCake

blueberry_pie_with_a_cup_of_coffee.js -> BlueberryPieWithACupOfCoffee

[我假设CamelCase是您想要的形式,还有其他形式,例如camelCase。]

对于驼峰命名法:

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

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

请注意,最后的“g”标志正在为您完成大部分工作,以获取超出两个显式捕获的匹配项。

我将捕获组保留为 ([a-z]*) ,就像您所拥有的那样。您可能需要使用 ([A-Za-z0-9]*) 以获得更大的灵 active 。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com