JavaScriptで母音を大文字化し、各文字を次のアルファベットに置き換える方法(z→a)
はじめに
JavaScriptでは、文字列を引数として受け取り、特定のルールに従って新しい文字列を生成する関数を簡単に作成できます。本記事では、「すべての母音を大文字にし、かつ各アルファベットをその次の文字へ置き換える(zの場合はaへ折り返す)」という処理を実現する関数の実装方法を解説します。
要件の確認
今回作成するのは、以下の条件を満たすJavaScript関数です。
- 入力として文字列を1つだけ受け取る
- 母音(a, e, i, o, u)は大文字に変換する
- それ以外のアルファベットは、対応する次のアルファベットへ置き換える(例:z → a)
実行例
たとえば、次の文字列を入力した場合を見てみましょう。
const str = 'newString';
このとき、期待される出力は以下のようになります。
const output = 'oExSusIoh';
結果を確認すると、「n」は「o」へ、「e」は大文字の「E」へ、「w」は「x」へと変換されています。一方、すでに大文字である「S」は正規表現のマッチ対象外のため、そのまま維持されます。
サンプルコード
この処理を実現するコードは以下の通りです。
const str = 'newString';
const capitiliseAndMove = (str = '') => {
let s = '';
s = str.replace(/[a-z]/g, function(c) {
return 'aeiou'.indexOf(c) > -1
? c.toUpperCase()
: String.fromCharCode(Math.max(c.charCodeAt(0) % 122 + 1, 97));
});
return s;
};
console.log(capitiliseAndMove(str));コードの仕組み
この関数のポイントは次の3点です。
- replace()と正規表現による一括処理:/[a-z]/g のパターンで小文字のアルファベットを1文字ずつ抽出し、gフラグによって文字列内の該当箇所すべてを処理します。
- 母音の判定と大文字化:「aeiou」という基準文字列に対して indexOf() を使い、現在の文字が母音に含まれる場合は toUpperCase() で大文字へ変換します。
- 子音のシフトとz→aの折り返し:charCodeAt(0) で文字コードを取得し、「% 122 + 1」の計算で次の文字へ移動させます。さらに Math.max(..., 97) を組み合わせることで、z(文字コード122)がa(文字コード97)へ正しく折り返されます。
出力結果
コンソールには以下のように表示されます。
oExSusIoh
-
JavaScriptのTextEncoderとTextDecoderとは?文字列とバイト列の相互変換をわかりやすく解説
JavaScriptでは、文字列とバイト列(バイナリデータ)を相互に変換したい場面がよくあります。そんなときに活躍するのが、TextEncoderとTextDecoderという2つの標準組み込みAPIです。本記事では、それぞれの役割と基本的な使い方を、実際に動くサンプルコードとともに解説します。 TextEncoderとは TextEncoderは、指定した文字列をUTF-8形式に変換(エンコード)するためのオブジェクトです。encode()メソッドに文字列を渡すと、変換結果がUint8Array(符号なし8ビット整数の配列)として返されます。 TextDecoderとは TextDecod
-
【JavaScript】正規表現で名前が半角英数字・アンダースコアのみかどうかを判定する方法
本記事では、JavaScriptの正規表現を使って、入力された名前(テキスト)が「数字・英字・アンダースコア」のみで構成されているかどうかをチェックする方法を解説します。 使用する正規表現 今回使用する正規表現は以下の通りです。 /^\w+$/ 各要素の意味は次の通りです。 ^ … 文字列の先頭を表します \w+ … 半角英字(a〜z、A〜Z)、数字(0〜9)、アンダースコア(_)のいずれかに1文字以上連続でマッチします $ … 文字列の末尾を表します つまり、文字列全体が英数字とアンダースコアだけで構成されている場合にのみマッチし、空白や他の記号が含まれるとマッチしなくなります。 サ