JavaScriptで文字列のn文字ごとに文字を挿入する方法
課題の概要
JavaScriptで、次の3つの引数を受け取る関数を作成することを考えます。
- 第1引数:対象となる文字列
- 第2引数:挿入間隔となる数値(文字列の長さより小さい値が保証されています)
- 第3引数:挿入したい1文字(以下「char」と呼びます)
この関数は、文字列の中でn文字ごとの位置にcharを挿入し、その新しい文字列を返す必要があります。
入力例
const str = 'NewDelhi'; const n = 3; const char = ' ';
期待される出力
const output = 'Ne wDe lhi';
解決策のコード
ここでは、文字列を一度反転させてから正規表現でn文字ずつ区切り、挿入用の文字で結合したあと、再度反転して元の順序に戻すという手法を使います。
const str = 'NewDelhi';
const n = 3;
const char = ' ';
const insertAtEvery = (str = '', num = 1, char = ' ') => {
// 文字列を反転する
str = str.split('').reverse().join('');
// n文字ごとにマッチさせる正規表現を生成
const regex = new RegExp('.{1,' + num + '}', 'g');
// マッチした部分をcharで連結
str = str.match(regex).join(char);
// 再度反転して元の並びに戻す
str = str.split('').reverse().join('');
return str;
};
console.log(insertAtEvery(str, n, char));
処理の流れ
- 反転:「NewDelhi」を反転すると「ihleDweN」になります。
- 分割:正規表現 /.{1,3}/g によって、「ihl」「eDw」「eN」というように3文字ずつ配列へ分解されます。
- 結合:これらを半角スペースで結合すると「ihl eDw eN」になります。
- 再反転:最後にもう一度反転すると「Ne wDe lhi」となり、目的の文字列が完成します。
コンソール出力
Ne wDe lhi
補足:挿入位置の数え方について
この実装では、文字列を先に反転してから分割しているため、挿入位置は文字列の末尾側から数えてn文字ごとになります。上記の例でも、「New」「Del」「hi」という3文字のかたまりが基準となり、結果として「Ne wDe lhi」が出力されます。
もし先頭側からn文字ごとに挿入したい場合は、反転処理を省き、match() の結果をそのまま join(char) で連結するだけで、同じ考え方で簡単に対応できます。
-
JavaScriptで文字列内の指定した文字の直後にある次の文字を取得する方法
課題JavaScriptで、文字列 str と1文字の char を引数として受け取る関数を作成する必要があります。この関数の役割は、元の文字列の中で char が現れる箇所をすべて見つけ、それぞれの直後に存在する文字(存在する場合のみ)を取り出して、それらを連結した新しい文字列を返すことです。例えば、対象の文字が文字列の末尾に位置している場合、その直後に文字は存在しないため、結果には含まれません。実装例以下が実際のコードです。 { let res = ; for(let i = 0; i <
-
JavaScriptでスペースの位置を維持したまま文字列を反転させる方法
問題空白(スペース)を含む可能性のある文字列を受け取り、各単語の文字順だけを反転させるJavaScript関数を作成することを考えます。求められる条件は次のとおりです。単語内部の文字は逆順に並べ替える単語と単語を区切るスペースの位置は元のまま維持する異なる単語の文字同士が入れ替わらないようにするアプローチ基本となるアイデアは、「元の文字列を末尾から先頭へ向かって走査し、空白以外の文字を結果用の文字列へ追加していく」というものです。文字を追加するたびに、結果文字列の現在の長さをインデックスとして元の文字列を参照し、その位置がスペースであれば同じくスペースを結果に加えます。こうすることで、スペース