JavaScript 中的正则表达式或其他转换为骆驼式大小写的方式

Regular expression or other way to convert to camel-like case in JavaScript

我看过类似的帖子,但其中 none 处理的是这个具体案例。 我想将一些旧的命名约定转换为骆驼式大小写。但是,我希望转换仅限于以下内容:

A string(由任何大小写的字母或数字组成)后跟下划线,然后是 alphabet 应该替换为相同的字符串后跟[=​​24=]相同的字母表,但只有大写的字母表。而已。

一些示例:

aXc9tu_muKxx  ->  aXc9tuMuKxx
zdmmpFmxf     ->  zdmmpFmxf //unchanged 
_xfefx        ->  _xfefx    //unchanged
Z_9fefx       ->  Z9fefx    //EDITED after getting answers.

所以,如果?在正则表达式中意味着出现 1 次或多次,并且 [] 用于指定字符范围,那么我想源表达式将是: ([0-9a-zA-Z])?_([0-9a-zA-Z])?

我愿意使用 Javascript 或任何 Linux 工具。我再次重申,转换将只涉及两个字符 _ 和紧随其后的字母,如果它确实是一个字母的话。 _ 将被删除,字母将变为大写。如果不是字母而是数字,那么只去掉下划线。

目标是转向驼峰式大小写,但保持旧命名约定的可读性,转换后可读性可能会受到影响。例如,THIS_IS_A_CONSTANT 不会更改为 THISISACONSTANT。

您可以使用 Replacement callback:

function toCamelCase(str) {
  return str.replace(/(?!^)_([a-z])/g, function(matches) {
    return matches[1].toUpperCase();
  });
}

正则表达式的解释:

(?!^) - 在字符串开头不匹配(您的 "_xfefx" 示例)
_ - 匹配下划线 (duh...)
([a-z]) - 匹配一个小写字母并在组 1 中捕获,matches[1]
/.../g - "global" 匹配,即不仅替换第一个,而且替换所有出现的