簡體   English   中英

將snake_case 更改為PascalCase 的Javascript 方法

[英]Javascript method for changing snake_case to PascalCase

我正在尋找一種 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();
    });
  }

任何建議表示贊賞!

編輯 - 找到解決方案

這是我最終使用的。 如果您使用它,請注意我使用的是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);
  }

這是一個保留斜杠並將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 字符串由分隔它們的'/'字符重新連接。

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_call_shop_session

輸出:ICallShopSession

這應該可以解決問題。

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('');
}

或類似的東西:

 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)) ;

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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM