一种将snake_case转换为PascalCase的Javascript方法

5lhxktic  于 2023-02-07  发布在  Java
关注(0)|答案(6)|浏览(158)

我正在寻找一个JS方法,将snake_case变成PascalCase,同时保持斜线不变。

// examples:
post -> Post
admin_post -> AdminPost
admin_post/new -> AdminPost/New
admin_post/delete_post -> AdminPost/DeletePost

等等。
我有一个可以将snake_case转换为camelCase并保留斜线的程序,但是在将其转换为PascalCase时遇到了问题
以下是我目前的发现:

_snakeToPascal(string){
    return string.replace(/(_\w)/g, (m) => {
      return m[1].toUpperCase();
    });
  }

任何建议都是赞赏!

EDIT-找到解决方案

这是我最后使用的。如果你使用这个,请注意,我使用的是this._upperFirst,因为我在课堂上使用它。它有点油腻,但它的工作。

_snakeToPascal(string){
    return string.split('_').map((str) => {
      return this._upperFirst(
        str.split('/')
        .map(this._upperFirst)
        .join('/'));
    }).join('');
  }

  _upperFirst(string) {
    return string.slice(0, 1).toUpperCase() + string.slice(1, string.length);
  }
blmhpbnm

blmhpbnm1#

这里有一个解决方案,它可以保留斜线并将snake_case转换为PascalCase。

const snakeToPascal = (string) => {
  return string.split("/")
    .map(snake => snake.split("_")
      .map(substr => substr.charAt(0)
        .toUpperCase() +
        substr.slice(1))
      .join(""))
    .join("/");
};

它首先在'/'字符处拆分输入,以创建需要转换的snake_case字符串数组。然后在'_'字符处拆分这些字符串,以创建子字符串数组。然后将此数组中的每个子字符串大写,然后重新连接为单个PascalCase字符串。然后用分隔它们的'/'字符重新连接PascalCase字符串。

r1zhe5dt

r1zhe5dt2#

PascalCase类似于camelCase。只是第一个字符不同。

const snakeToCamel = str => str.replace( /([-_]\w)/g, g => g[ 1 ].toUpperCase() );
const snakeToPascal = str => {
    let camelCase = snakeToCamel( str );
    let pascalCase = camelCase[ 0 ].toUpperCase() + camelCase.substr( 1 );
    return pascalCase;
}
console.log( snakeToPascal( "i_call_shop_session" ) );

输入:i_呼叫_车间_会话
输出:ICallShopSession

elcex8rz

elcex8rz3#

这个应该可以了。

function _snake2Pascal( str ){
    str +='';
    str = str.split('_');
    for(var i=0;i<str.length;i++){ 
        str[i] = str[i].slice(0,1).toUpperCase() + str[i].slice(1,str[i].length);
    }
    return str.join('');
}

编辑:
通过OP中所示的所有测试用例的版本:

function snake2Pascal( str ){
    str +='';
    str = str.split('_');

    function upper( str ){
        return str.slice(0,1).toUpperCase() + str.slice(1,str.length);
    }

    for(var i=0;i<str.length;i++){
        var str2 = str[i].split('/');
        for(var j=0;j<str2.length;j++){
            str2[j] = upper(str2[j]);
        }
        str[i] = str2.join('');
    }
    return str.join('');
}
tvz2xvvm

tvz2xvvm4#

或者类似的东西:

function snake2CamelCase(string) {
  return string
    .replace(
      /_(\w)/g,
      ($, $1) => $1.toUpperCase()
    )
  ;
}

function snake2PascalCase(string) {
  let s = snake2CamelCase(string);
  
  return `${s.charAt(0).toUpperCase()}${s.substr(1)}`; 
}


[
  'something_went_wrong',
  'thisIs_my_snakecase'
]
  .map(s => ({[s]: snake2PascalCase(s)}))
  .forEach((s, i) => console.log(i, s))
;
bbmckpt7

bbmckpt75#

const toString = (snake_case_str) => {
    const newStr = snake_case_str.replace(/([-_][a-z])/gi, ($1) => {
        return $1.toUpperCase().replace('-', ' ').replace('_', ' ');
    });
    let changedStr =
        newStr.slice(0, 1).toUpperCase() + newStr.slice(1, newStr.length);
    return changedStr;
};
let str = 'first_name';
console.log(toString(str));
wlwcrazw

wlwcrazw6#

let str = "hello_foo_bar" // Your string in camel_case
    
// Convert str to PascalCase
str.split('_').map(function (elem) {return elem.slice(0,1).toUpperCase()+elem.slice(1)}).join('')

// Output should be HelloFooBar

相关问题