web-dev-qa-db-ja.com

JavascriptはPascalCaseをunderscore_caseに変換します

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

例えば。変換する

TypeOfData.AlphaBeta

type_of_data_alpha_beta
51
zahmati

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

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

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

  • これは、開始大文字を_ + 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(/^_/, ""));

word全体が大文字の場合に停止する方法。例えば。 MotorRPMmotor_rpmではなくmotor_r_p_mに入れますか?またはBatteryAAAbattery_aaaではなくbattery_a_a_aに入れますか?

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

どういたしまして

var s1 = 'someTextHere';
var s2 = 'SomeTextHere';

var o1 = s1.split(/(?=[A-Z])/).join('_').toLowerCase();
var o2 = s2.split(/(?=[A-Z])/).join('_').toLowerCase();

console.log(o1);
console.log(o2);
50
cojack

または、 lodash を使用します。

lodash.snakeCase(str);

例:

_.snakeCase('TypeOfData.AlphaBeta');
// ➜ 'type_of_data_alpha_beta'

Lodashは、多くの日常的なjsタスクへのショートカットを提供する優れたライブラリです。camelCasekebabCaseなど、他にも多くの類似した文字列操作関数があります。

39
Wtower
"alphaBetaGama".replace(/([A-Z])/g, "_$1").toLowerCase() // alpha_beta_gamma

問題-インターフェース要件を満たすため、またはメタプログラミングのために、キャメルケース文字列(プロパティ名など)をアンダースコアスタイルに変換する必要があります。

説明この行は、一致した結果を返すことができる正規表現の機能を使用しています(()の最初のペアは$1、2番目は$2など)。

文字列内の各一致は、_$1文字列が指定されたアンダースコアを含むように変換されます。その時点で、文字列はalpha_Beta_Gammaのようになります。

大文字を修正するために、文字列全体がLowerCase()に変換されます。

ToLowerCaseはかなり高価な操作であるため、各マッチケースのループハンドラーに入れずに、ストリング全体で1回実行するのが最善です。

toLowerCaseの後、結果の文字列はalpha_beta_gammaです(この例では)

1
Hgehlhausen

このソリューションは、上記のソリューションで末尾にない頭字語の問題を解決します

コードを 1175208 from 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
1
Scott P.

これにより、かなり遠くまで移動できます。 https://github.com/domchristie/humps

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

1
errata
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;
}

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

1
Gabit Kemelov
"TestString".replace(/[A-Z]/g, val => "_" + val.toLowerCase()).replace(/^_/,"")

すべての大文字をアンダースコアと小文字に置き換え、先頭のアンダースコアを削除します。

0
user3413723