83

PascalCase文字列を文字列に変換するにはどうすればよいunderscore_case/snake_caseですか? ドットもアンダースコアに変換する必要があります。

例えば。変換

TypeOfData.AlphaBeta

の中へ

type_of_data_alpha_beta
4

11 に答える 11

106

以下の手順を試すことができます。

  • すべての大文字をキャプチャし、前のオプションのドット文字にも一致させます。

  • 次に、キャプチャした大文字を小文字に変換し、戻って関数を_前の文字に置き換えます。これは、置換部分で無名関数を使用することによって実現されます。

  • これにより、先頭の大文字が_+ lowercase_letter に置き換えられます。

  • 最後に、最初のアンダースコアを削除すると、目的の出力が得られます。

    var s = 'TypeOfData.AlphaBeta';
    console.log(s.replace(/(?:^|\.?)([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));
    

また

var s = 'TypeOfData.AlphaBeta';
alert(s.replace(/\.?([A-Z])/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));

単語全体が大文字の場合に停止する方法。例えば。MotorRPMmotor_rpm代わりにmotor_r_p_m?または代わりBatteryAAAに?battery_aaabattery_a_a_a

var s = 'MotorRMP';
alert(s.replace(/\.?([A-Z]+)/g, function (x,y){return "_" + y.toLowerCase()}).replace(/^_/, ""));

于 2015-05-29T04:45:56.873 に答える
11

この解決策は、上記の解決策で頭字語が末尾にない問題を解決します

1175208のコードをPython から JavaScript に移植しました。

Javascript コード

function camelToSnakeCase(text) {
    return text.replace(/(.)([A-Z][a-z]+)/, '$1_$2').replace(/([a-z0-9])([A-Z])/, '$1_$2').toLowerCase()
}

作業例:

camelToSnakeCase('thisISDifficult') -> this_is_difficult

camelToSnakeCase('thisISNT') -> this_isnt

camelToSnakeCase('somethingEasyLikeThis') -> something_easy_like_this
于 2019-07-05T00:31:43.293 に答える
1

これにより、かなり遠くまで行くことができます: https://github.com/domchristie/humps

「。」を置き換えるには、おそらく正規表現の置換を使用する必要があります。アンダースコア付き。

于 2015-05-29T04:39:45.403 に答える
0
function toCamelCase(s) {
  // remove all characters that should not be in a variable name
  // as well underscores an numbers from the beginning of the string
  s = s.replace(/([^a-zA-Z0-9_\- ])|^[_0-9]+/g, "").trim().toLowerCase();

  // uppercase letters preceeded by a hyphen or a space
  s = s.replace(/([ -]+)([a-zA-Z0-9])/g, function(a,b,c) {
    return c.toUpperCase();
  });

  // uppercase letters following numbers
  s = s.replace(/([0-9]+)([a-zA-Z])/g, function(a,b,c) {
    return b + c.toUpperCase();
  });

  return s;
}

この機能をお試しください。

于 2015-05-29T05:07:00.090 に答える