Regex 正则表达式中匹配/反向引用的可变数量?

Regex 正则表达式中匹配/反向引用的可变数量?,regex,sublimetext,boost-regex,Regex,Sublimetext,Boost Regex,我最近花了一些时间将一些SCSS代码转换为手写笔,我的正则表达式步骤之一是去掉变量名中的$字符,同时将这些名称格式化为camelCase而不是连字符大小写 例如,$long连字符变量名:value变为长连字符VariableName=value但是参数名如text size没有变成textSize 无论如何,我的正则表达式技能非常有限,所以我只能通过一系列的过程来解决这个问题,首先查找可能包含多达6个部分(5个连字符)的变量名,然后在后续过程中查找较短的变量名,并将字符串的每个部分作为单独的反向

我最近花了一些时间将一些SCSS代码转换为手写笔,我的正则表达式步骤之一是去掉变量名中的
$
字符,同时将这些名称格式化为camelCase而不是连字符大小写

例如,
$long连字符变量名:value变为
长连字符VariableName=value
但是参数名如
text size
没有变成
textSize

无论如何,我的正则表达式技能非常有限,所以我只能通过一系列的过程来解决这个问题,首先查找可能包含多达6个部分(5个连字符)的变量名,然后在后续过程中查找较短的变量名,并将字符串的每个部分作为单独的反向引用传递,这样我就可以大写第一个字母。但我想知道是否有更好的方法:即,是否有一种方法可以在字符串中获得可变数量的子字符串匹配,并根据得到的子字符串数量提供回引用?我就是找不到这方面的任何信息

这是我的代码,分为六个步骤,如果可能的话,我想将其浓缩为一个步骤(我正在考虑编写一个多步骤正则表达式例程,可以将SCS转换为手写笔以备将来使用)。在每种情况下,搜索表达式后跟替换表达式:

\$(\S*?)\-(\S*?)\-(\S*?)\-(\S*?)\-(\S*?)\-(.)
$1\u$2\u$3\u$4\u$5\u$6

\$(\S*?)\-(\S*?)\-(\S*?)\-(\S*?)\-(.)
$1\u$2\u$3\u$4\u$5

\$(\S*?)\-(\S*?)\-(\S*?)\-(.)
$1\u$2\u$3\u$4

\$(\S*?)\-(\S*?)\-(.)
$1\u$2\u$3

\$(\S*?)\-(.)
$1\u$2

\$(.)
$1
如果你使用C#你很幸运,因为它是少数支持子表达式捕获的语言之一(如果不是唯一的语言的话)

我对其他语言感兴趣,所以如果您的语言支持,请告诉我们

)

NET API可以如下所示

 Matches
     Groups (most regex engines stop here)
         Captures (unique for .NET)
更新

你可以使用这种模式

将s/b替换为“无”


在编辑器中,您可以使用多个查找替换来获得所需的输出,或者可以创建一个实现逻辑的简单递归宏。

有全局替换,它们与匹配的数量无关。它们可能无法提供问题的一般解决方案,但在
sed
中,您可以执行以下操作:

$ sample='$test-size: 12; $long-hyphenated-variable-name: value;'
$ echo $sample | sed 's/-\(\w\)/\U\1/g; s/\$\(\w\+\):/\1 =/g'
testSize = 12; longHyphenatedVariableName = value;

这可能是解决方案,但我不知道如何实现它——我只是在文本编辑器的查找和替换功能中使用Regex。有没有办法在这种情况下应用这一点?或者我还可以/应该使用什么?仅供参考,我添加了
boost regex
标记,因为这似乎是Sublime文本使用的味道。
(?im)(\$(?![a-z-]+\s*:\s*\d+)\S*?)-
$ sample='$test-size: 12; $long-hyphenated-variable-name: value;'
$ echo $sample | sed 's/-\(\w\)/\U\1/g; s/\$\(\w\+\):/\1 =/g'
testSize = 12; longHyphenatedVariableName = value;