LoginSignup
1
2

More than 5 years have passed since last update.

【PowerShell】スネークケース⇔キャメルケース相互変換

Last updated at Posted at 2016-05-28
$snake = "get_current_directory"

# スネークケースからキャメルケースに変換
$camel = ([regex]"_([a-z])").Replace($snake, {
    $args[0].Groups[1].Value.ToUpper()
})

echo $camel #=> "getCurrentDirectory"
$camel = "getCurrentDirectory"

# キャメルケースからスネークケースに変換
$snake = ([regex]"[A-Z]").Replace($camel, {
    "_" + $args[0].Groups[0].Value.ToLower()
})

echo $snake #=> "get_current_directory"
  • [regex]で文字列をSystem.Text.RegularExpressions.Regexオブジェクトに変換する。
  • {}で囲まれている部分はスクリプトブロックと呼ばれ、複数の処理を一つにまとめられる。スクリプトブロックは値として扱える。つまり、変数に格納できるし、メソッドの引数として渡すこともできる。イメージ的には高階関数、ラムダ式のようなもの。今回はRegex.Replaceメソッドの第二引数にスクリプトブロックを渡している。
  • スクリプトブロック呼び出し時のパラメータは、$args配列に格納されている。
  • Regex.Replaceメソッドには、第一引数に置換対象文字列を、第二引数にMatchEvaluatorオブジェクトを受け取るものがある。今回はそれを使用している。PowerShellがどのようにしてスクリプトブロックをMatchEvaluatorオブジェクトに変換しているかは不明。

下は、キャメルケース⇔スネークケースのコマンドレット。文字列は引数として与えてもいいし、パイプラインで与えてもいい。

function ConvertCamelToSnake
{
    param
    (
        [Parameter(ValueFromPipeline=$true)]
        [string]
        $String
    )

    process
    {
        ([regex]"[A-Z]").Replace($String, {
            "_" + $args[0].Groups[0].Value.ToLower()
        })
    }
}

function ConvertSnakeToCamel
{
    param
    (
        [Parameter(ValueFromPipeline=$true)]
        [string]
        $String
    )

    process
    {
        ([regex]"_([a-z])").Replace($String, {
            $args[0].Groups[1].Value.ToUpper()
        })
    }
}
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2