Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
Javascript 用于标识文档中所有大小写字符串的正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 用于标识文档中所有大小写字符串的正则表达式

Javascript 用于标识文档中所有大小写字符串的正则表达式,javascript,regex,Javascript,Regex,我对正则表达式生疏了,需要一些帮助。继承的js代码库混合使用camel-case和snake-case来表示变量名和对象属性 我正在尝试制定一个正则表达式,我可以使用它来识别所有驼峰大小写字符串,然后能够用蛇壳替换这些字符串。我正在努力解决的部分是在我现有的条件下识别骆驼套的绳子 识别哪些字符串是驼峰大小写:在本文档中,所有驼峰大小写的字符串都以小写字母、下划线或$开头,然后在字符串的后面某个位置使用大写字母。例如:someCamelCasedString&\u someCamelCasedSt

我对正则表达式生疏了,需要一些帮助。继承的js代码库混合使用camel-case和snake-case来表示变量名和对象属性

我正在尝试制定一个正则表达式,我可以使用它来识别所有驼峰大小写字符串,然后能够用蛇壳替换这些字符串。我正在努力解决的部分是在我现有的条件下识别骆驼套的绳子


识别哪些字符串是驼峰大小写:在本文档中,所有驼峰大小写的字符串都以小写字母、下划线或$开头,然后在字符串的后面某个位置使用大写字母。例如:
someCamelCasedString
&
\u someCamelCasedString
&
$someCamelCasedString
。正则表达式需要考虑到我试图匹配的某些字符串可能是对象属性,因此它应该能够识别如下内容:
Foo.\u someCamelCasedString.bar
Foo[\u someCamelCasedString].bar

可能是这样的:

/(\w|\$)+([A-Z])\w+/gm

你可以在这里玩一下,看看例子:该网站还解释了正则表达式中每个片段的含义。

可能是这样的:

/(\w|\$)+([A-Z])\w+/gm

你可以在这里玩一下,看看例子:该网站还解释了每个片段在正则表达式中的含义。

这识别了所有出现的“严格”驼峰大小写(仅字母)。它们是以
\uu
还是
$
foooo
开头并不重要

[a-z]+[A-Z][a-zA-Z]*
边缘大小写是驼峰大小写这是正确的驼峰大小写吗?我想是的,但我们可以改变

如果您想在字符串中允许其他字符(数字等),那么我们可以将它们添加到字符类中。因此,这是一个根据您的需求进行改进的起点

例如,如果你知道你对数字和下划线很满意,你可以这样做:

[a-z]\w*?[A-Z]\w*
[a-z][\w$]*[A-Z][\w$]*
如果您还想在名称中允许美元(一个@Jongware表示js字符串允许的字符),您可以这样做:

[a-z]\w*?[A-Z]\w*
[a-z][\w$]*[A-Z][\w$]*

然后是什么构成有效字符串的边界的问题,这样我们也许可以设计一些锚点(可能带有鬼鬼祟祟的lookaheads,因为js不支持lookbehinds)以避免误报。

这识别了所有出现的“严格”驼峰大小写(仅字母)。它们是以
\uu
还是
$
foooo
开头并不重要

[a-z]+[A-Z][a-zA-Z]*
/(?:^|\s|[^\w$])([a-z_$][a-zA-Z]*[A-Z][a-zA-Z]*)/gm
边缘大小写是驼峰大小写这是正确的驼峰大小写吗?我想是的,但我们可以改变

如果您想在字符串中允许其他字符(数字等),那么我们可以将它们添加到字符类中。因此,这是一个根据您的需求进行改进的起点

例如,如果你知道你对数字和下划线很满意,你可以这样做:

[a-z]\w*?[A-Z]\w*
[a-z][\w$]*[A-Z][\w$]*
如果您还想在名称中允许美元(一个@Jongware表示js字符串允许的字符),您可以这样做:

[a-z]\w*?[A-Z]\w*
[a-z][\w$]*[A-Z][\w$]*
还有一个问题是什么构成了一个有效字符串的边界,这样我们也许可以设计一些锚(可能是带有鬼鬼祟祟的lookaheads,因为js不支持lookbehinds),以避免误报

/(?:^|\s|[^\w$])([a-z_$][a-zA-Z]*[A-Z][a-zA-Z]*)/gm
试验


测试

FYI,我充实了答案,考虑了一些改进和边缘情况。如果需要换个方向,请告诉我们。谢谢@zx81,你的答案太完美了!很抱歉推迟投票。很高兴听到它对您有效,谢谢您让我知道。:)我已经想出了答案来考虑一些改进和边缘情况。如果需要换个方向,请告诉我们。谢谢@zx81,你的答案太完美了!很抱歉推迟投票。很高兴听到它对您有效,谢谢您让我知道。:)注意:JS不允许在名称中使用破折号,但它允许下划线、数字和一些意外字符(
$
,请参阅完整列表。我希望OP没有在“καμήλαΥπόθεση”中找到变量):@Jongware感谢您的输入,将“破折号”示例更改为“美元”示例:)@PaulT嘿,Paul,这个问题解决了吗,还是你仍然有问题?注意:JS不允许在名称中使用破折号,但它允许下划线、数字和一些意外字符(
$
,请参阅完整的列表。我希望OP没有在“καμήλαΥπόθεη”中找到变量。)@Jongware谢谢你的输入,将“破折号”示例更改为“美元”示例:@保罗,嘿,保罗,这个问题解决了吗,还是你还没解决?