Regex 在VSCode用户代码段中将Pascal大小写转换为Kebab大小写
我目前正在尝试编写一个用户代码段,它将以${1}为变量,例如jobsummary,并将其转换为Kebab case jobs summaryRegex 在VSCode用户代码段中将Pascal大小写转换为Kebab大小写,regex,visual-studio-code,Regex,Visual Studio Code,我目前正在尝试编写一个用户代码段,它将以${1}为变量,例如jobsummary,并将其转换为Kebab case jobs summary "Example": { "prefix": "test", "body": [ "${1}", "${1} -> ${1/(^.)+([A-Z])+/${1:/downcase}/}" ] } 将visual studio代码用户片段中的变量从Pascal大小写转换为Kebab大小写的正确方法是什么
"Example": {
"prefix": "test",
"body": [
"${1}",
"${1} -> ${1/(^.)+([A-Z])+/${1:/downcase}/}"
]
}
将visual studio代码用户片段中的变量从Pascal大小写转换为Kebab大小写的正确方法是什么
作业摘要->作业摘要
另一个某物的例子->另一个某物的例子
"Example": {
"prefix": "psc",
"body": [
"${1}",
"${1} -> ${1/([A-Z][a-z]*)([A-Z][a-z]*)?([A-Z][a-z]*)?([A-Z][a-z]*)?/${1:/downcase}${2:+-}${2:/downcase}${3:+-}${3:/downcase}${4:+-}${4:/downcase}/}"
],
"description": "Convert from PascalCase to kebab-case"
},
通常,我能够让这些在一个更短的版本中工作-使用全局修饰符-因此对于任意数量的单词。但我在这件事上做不到。上面的代码最多可硬编码四个单词,如PascalCaseThreeFour
它适用于一到四个单词,但不适用于更多的单词,但您可以轻松地修改任意多个单词。变换有一个明显的模式,可以添加更多
上面看到的${3:+-}构造意味着如果有捕获组3,请添加连字符
编辑:以下简化将处理PascalCase中任意数量的单词:
"${1} -> ${1/([A-Z][a-z]+)/${1:/downcase}-/g}$0"
但会导致像这样的拖尾:
PascalCaseSethreeforfive->pascal案例三四五-如果您不介意在尾随破折号上退格-。否则,很容易将此代码段合并到宏中,然后删除最后一个破折号
此外,该命令可能对您有效-它看起来有一个烤肉串案例命令
更新:
请参阅我的答案,了解一个非常强大的工作示例,该示例处理许多情况,包括大写字母序列和许多其他奇数情况:
"snake": {
"prefix": "snake",
"body": "${TM_SELECTED_TEXT/([A-Z]{2,})(?=[A-Z][a-z]+[0-9]*|$)|([A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+)([- _])?/${1:/downcase}${2:/downcase}${2:+_}/gm}"
},
这项工作:
"Example": {
"prefix": "psc",
"body": [
"${1}",
"${1} -> ${1/([A-Z][a-z]*)([A-Z][a-z]*)?([A-Z][a-z]*)?([A-Z][a-z]*)?/${1:/downcase}${2:+-}${2:/downcase}${3:+-}${3:/downcase}${4:+-}${4:/downcase}/}"
],
"description": "Convert from PascalCase to kebab-case"
},
通常,我能够让这些在一个更短的版本中工作-使用全局修饰符-因此对于任意数量的单词。但我在这件事上做不到。上面的代码最多可硬编码四个单词,如PascalCaseThreeFour
它适用于一到四个单词,但不适用于更多的单词,但您可以轻松地修改任意多个单词。变换有一个明显的模式,可以添加更多
上面看到的${3:+-}构造意味着如果有捕获组3,请添加连字符
编辑:以下简化将处理PascalCase中任意数量的单词:
"${1} -> ${1/([A-Z][a-z]+)/${1:/downcase}-/g}$0"
但会导致像这样的拖尾:
PascalCaseSethreeforfive->pascal案例三四五-如果您不介意在尾随破折号上退格-。否则,很容易将此代码段合并到宏中,然后删除最后一个破折号
此外,该命令可能对您有效-它看起来有一个烤肉串案例命令
更新:
请参阅我的答案,了解一个非常强大的工作示例,该示例处理许多情况,包括大写字母序列和许多其他奇数情况:
"snake": {
"prefix": "snake",
"body": "${TM_SELECTED_TEXT/([A-Z]{2,})(?=[A-Z][a-z]+[0-9]*|$)|([A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+)([- _])?/${1:/downcase}${2:/downcase}${2:+_}/gm}"
},
这适用于PascalCase中任意数量的单词,且不带尾随破折号:
"${TM_SELECTED_TEXT} -> ${TM_SELECTED_TEXT/(^[A-Z][a-z]*|[a-z])([A-Z])?/${1:/downcase}${2:+-}${2:/downcase}/g}"
这将产生如下结果:
AnotherExampleOfSomething -> another-example-of-something
唯一的问题是,它不喜欢大写字母的顺序,就像首字母缩略词一样,只有第一个字符会被降格。但是,它可能仅适用于两个字母的缩写,因为根据较长的首字母缩写词应使用camel/Pascal大小写,这很好。这适用于PascalCase中的任意数量的单词,并且没有尾随破折号:
"${TM_SELECTED_TEXT} -> ${TM_SELECTED_TEXT/(^[A-Z][a-z]*|[a-z])([A-Z])?/${1:/downcase}${2:+-}${2:/downcase}/g}"
这将产生如下结果:
AnotherExampleOfSomething -> another-example-of-something
唯一的问题是,它不喜欢大写字母的顺序,就像首字母缩略词一样,只有第一个字符会被降格。但是,它可能只适用于两个字母的缩写,因为根据较长的缩写词,无论如何都应该使用camel/Pascal大小写,这很好。问题是什么,它是如何失败的?@PoulBak updated question问题是什么,它是如何失败的?@PoulBak updated question谢谢,这和我需要的非常接近。有没有一种方法可以让它在无限的捕获组中工作?我尝试过,但没有成功,这让我很惊讶,因为如果你在这里搜索vscode代码片段转换,我可以在类似的情况下完成。这就是我对变换使用全局g修改器的意思。你需要多少?它现在可以使用1、2、3或4个单词,但可以很容易地扩展到更多单词。请参阅答案中的我的编辑,以处理任意数量的捕获组。谢谢,这确实非常接近我的需要。有没有一种方法可以让它在无限的捕获组中工作?我尝试过,但没有成功,这让我很惊讶,因为如果你在这里搜索vscode代码片段转换,我可以在类似的情况下完成。这就是我对变换使用全局g修改器的意思。你需要多少?它现在适用于1、2、3或4个单词,但可以轻松扩展到更多单词。请参阅答案中的“我的编辑”,以处理任意数量的捕获组。