Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在VSCode用户代码段中将Pascal大小写转换为Kebab大小写_Regex_Visual Studio Code - Fatal编程技术网

Regex 在VSCode用户代码段中将Pascal大小写转换为Kebab大小写

Regex 在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大小写的正确方法是什么

我目前正在尝试编写一个用户代码段,它将以${1}为变量,例如jobsummary,并将其转换为Kebab case jobs summary

"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个单词,但可以轻松扩展到更多单词。请参阅答案中的“我的编辑”,以处理任意数量的捕获组。