文字列を受け取り、アルファベットを鏡写し(反転)に変換するJavaScript関数の作り方
はじめに
本記事では、文字列を受け取り、その中のアルファベットをすべて「鏡写し(ミラーリング)」に変換するJavaScript関数を作成します。期待される動作は以下のとおりです。
入力:「abcd」
出力:「zyxw」
つまり、a↔z、b↔y のように、アルファベット順でちょうど反対側に位置する文字へと置き換えていきます。
アプローチの解説
この処理の考え方は非常にシンプルです。文字列内の各文字を、「26 − N」個離れた位置のアルファベットへマッピングします。ここで N はその文字の1始まりのインデックスです(例:e なら 5、j なら 10)。
実装には String.prototype.replace() メソッドを使用し、大文字・小文字を問わずすべての英字に一致する正規表現で一括置換を行います。関数の完全なコードは以下のとおりです。
コード例
const str = 'ABCD';
const mirrorString = str => {
const regex = /[A-Za-z]/g;
return str.replace(regex, char => {
const ascii = char.charCodeAt();
let start, end;
if(ascii > 96){
start = 97;
end = 122;
} else {
start = 65;
end = 90;
}
return String.fromCharCode(end - (ascii-start));
});
}
console.log(mirrorString(str));
console.log(mirrorString('Can we flip this as well'));
console.log(mirrorString('SOME UPPERCASE STUFF'));コードのポイント
- 正規表現 /[A-Za-z]/g: 大文字・小文字すべての英字に1文字ずつマッチさせます。数字や記号、空白はそのまま保持されます。
- charCodeAt(): 対象文字のASCIIコードを取得し、大文字(65〜90)か小文字(97〜122)かを判定して基準値を切り替えます。
- end − (ascii − start): アルファベットの反対側にあたるASCIIコードを計算し、String.fromCharCode() で文字に戻しています。
実行結果
コンソールには以下のように出力されます。
ZYXW Xzm dv uork gsrh zh dvoo HLNV FKKVIXZHV HGFUU
このように、大文字・小文字を混在した文字列でも、それぞれの英字が正しく鏡写しに変換され、それ以外の文字は元のまま維持されていることが確認できます。
-
JavaScriptのTextEncoderとTextDecoderとは?文字列とバイト列の相互変換をわかりやすく解説
JavaScriptでは、文字列とバイト列(バイナリデータ)を相互に変換したい場面がよくあります。そんなときに活躍するのが、TextEncoderとTextDecoderという2つの標準組み込みAPIです。本記事では、それぞれの役割と基本的な使い方を、実際に動くサンプルコードとともに解説します。 TextEncoderとは TextEncoderは、指定した文字列をUTF-8形式に変換(エンコード)するためのオブジェクトです。encode()メソッドに文字列を渡すと、変換結果がUint8Array(符号なし8ビット整数の配列)として返されます。 TextDecoderとは TextDecod
-
JavaScriptの分割代入を使った関数パラメータの受け渡し方法
JavaScriptでは、関数にオブジェクトを引数として渡す際、「分割代入(デストラクチャリング)」と呼ばれる構文を利用することで、オブジェクトの各プロパティを個別の変数として受け取ることができます。 さらに、各プロパティにデフォルト値を指定しておけば、対応するプロパティが存在しない場合でもエラーにならず、あらかじめ設定した値が使用されます。これにより、安全で柔軟な関数設計が可能になります。 サンプルコード 以下は、分割代入を使って関数のパラメータを受け取るJavaScriptのコード例です。 <!DOCTYPE html> <html lang="en&quo