正则表达式或其他方式在JavaScript中转换为类似驼峰的情况

Sun*_*nny 2 javascript regex camelcasing

我已经通过类似的帖子,但没有一个处理这个特定的情况.我想将一些旧的命名约定转换为类似驼峰的情况.但是,我希望转换仅限于以下内容:

一个字符串(在任何情况下由数字或数字组成)后跟一个下划线后跟一个字母表应该被相同的字符串替换,后面跟着相同的字母,但只有大写字母.而已.

一些例子:

aXc9tu_muKxx  ->  aXc9tuMuKxx
zdmmpFmxf     ->  zdmmpFmxf //unchanged 
_xfefx        ->  _xfefx    //unchanged
Z_9fefx       ->  Z9fefx    //EDITED after getting answers.
Run Code Online (Sandbox Code Playgroud)

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

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

目标是转向骆驼案例,但保持旧命名约定的可读性,转换后可读性可能会受到损害.例如,THIS_IS_A_CONSTANT不会更改为THISISACONSTANT.

Leo*_*ler 7

您可以使用Replacement回调:

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

正则表达式的解释:

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

  • 这不是"贪婪"匹配,而是"全局"匹配. (2认同)