我试图编写一个适用于大驼峰命名和小驼峰命名的正则表达式。
这是我尝试的正则表达式:
(([A-Z][a-z0-9]*){2,}|([a-z][A-Z0-9]*){2,})
尝试使用以下正则表达式匹配大驼峰命名法 - ([A-Z][a-z0-9]){2,},但是它也会匹配其他组合。第二部分也是类似的情况 - ([a-z][A-Z0-9]){2,})。
我试图编写一个适用于大驼峰命名和小驼峰命名的正则表达式。
这是我尝试的正则表达式:
(([A-Z][a-z0-9]*){2,}|([a-z][A-Z0-9]*){2,})
尝试使用以下正则表达式匹配大驼峰命名法 - ([A-Z][a-z0-9]){2,},但是它也会匹配其他组合。第二部分也是类似的情况 - ([a-z][A-Z0-9]){2,})。
[A-Z][a-z0-9]*[A-Z0-9][a-z0-9]+[A-Za-z0-9]*
示例:HelloWorld,AQuickBrownFox
小驼峰命名法
[a-z]+[A-Z0-9][a-z0-9]+[A-Za-z0-9]*
example: helloWorld, aQuickBrownFox
UpperCamelCase
中,只有UpperCamel
会被匹配。这是有意为之的吗?那么,您不想使用单词边界锚点来确保第一个正则表达式不匹配(子字符串)thisIsNotUpperCamelCase
吗?此外,应该是[A-Z]
而不是[A-Z0-9]
。最后(OP没有提到这一点),非ASCII变量名怎么办?许多语言允许在变量名中使用Unicode字符。 - Tim PietzckerA
或者 ABC
这样的字符串!我认为它应该是 [a-z]+[A-Z0-9][a-z0-9]*
。请注意,这里使用了 +
而不是 *
。 - gehho
^[a-z][a-z]*(([A-Z][a-z]+)*[A-Z]?|([a-z]+[A-Z])*|[A-Z])$
^[a-z][a-z0-9]*(([A-Z][a-z0-9]+)*[A-Z]?|([a-z0-9]+[A-Z])*|[A-Z])$
测试用例:https://regex101.com/library/8nQras
要匹配多个大写字母(例如deviceID
,serialNO
,awsVPC
,deviceSN
),需要稍微复杂一些:
^[a-z][a-z0-9]*(([A-Z]{1,3}[a-z0-9]+)*[A-Z]{0,3}|([a-z0-9]+[A-Z]{1,3})*|[A-Z]{1,3})$
^[A-Z](([a-z]+[A-Z]?)*)$
链接:https://regex101.com/library/sF2jRZ
^[A-Z](([a-z0-9]+[A-Z]?)*)$
为了匹配多于一个大写字母(例如:DeviceID
,SerialNo
,AwsVPC
,IOStream
,StreamIO
,DeviceSN
),需要稍微复杂一些:
^[A-Z](([A-Z]{1,2}[a-z0-9]+)+([A-Z]{1,3}[a-z0-9]+)*[A-Z]{0,3}|([a-z0-9]+[A-Z]{0,3})*|[A-Z]{1,2})$
对于 lowerCamelCase,您需要:
因此,适当的正则表达式应该是
[a-z][a-zA-Z0-9]+
同样地,针对 UpperCamelCase,你将有 [A-Z][a-zA-Z0-9]+
,如果你将其分组,你就会得到
[a-zA-Z][a-zA-Z0-9]+
编辑:如果您严格要求一个单词成为驼峰式单词,它必须有一个“驼峰”,其中驼峰是大写字母或数字,则需要:
然后您的正则表达式是:
[a-zA-Z][a-z]*([A-Z0-9]+[a-z]*)+
lower
。对于 lower/UpperCamelCase,应该有一个严格的定义,然后正则表达式就可以自动生成了。 - SWeko