HOWTO · JavaScript

JavaScript で文字列から文字を削除する

JavaScript で文字列から文字を削除するさまざまな方法を実演します。

このページの内容

JavaScript の文字列は不変です。そのため、文字を削除すると新しい文字列が作られて返され、元の値は変わりません。文字を特定する方法に応じて操作を選びます。グローバル正規表現を使うと一致する文字をすべて削除でき、slice() を使うと指定位置の文字を1つ削除でき、文字列を指定した replace() を使うと最初に一致した文字だけを削除できます。例では DelftStack を使います。文字 t が2つ含まれているため、選択肢ごとの違いが分かります。

グローバル正規表現ですべての一致文字を削除する

一致する文字をすべて削除するには、g フラグを付けた正規表現を replace() に渡します。g がない正規表現では、最初に一致したものだけが置き換えられます。置換文字列の '' は文字を追加しません。また、replace() は元の文字列を変更しないため、結果は新しい変数に代入します。

一致する t をすべて削除するには、次の例を実行します。コードと出力例の文字列は英語表記のままです。

このセクションのコードと表示されるラベルや出力は英語のままです。

const original = "DelftStack";
const result = original.replace(/t/g, "");
console.log(result);
DelfSack

この正規表現リテラルは、対象の文字があらかじめ分かっている場合に適しています。ユーザー入力からパターンを組み立てる場合は、RegExp を作る前に正規表現のメタ文字をエスケープしてください。そうしないと、. や * などが文字そのものではなく演算子として働きます。固定した文字との照合には正規表現の文字クラスも使えますが、文字クラス内で特別な意味を持つ文字はエスケープしてください。

既知のインデックスにある文字を slice() で削除する

JavaScript の文字列インデックスは0から始まります。DelftStack の t はインデックス 4 にあるため、その位置より前の部分と、対象文字より後の部分を取り出して連結します。slice() は元の文字列を変更せずに各部分を返します。提供されたインベントリでは、このAPIページの日本語版は確認できず、リンク先は英語版のみです。これは位置を基準にした削除です。有効なインデックスを指定すると、検索した文字と一致するかどうかに関係なく、その位置の文字を削除します。一致を確認してから削除したい場合は、先に text[index] を確認してください。

インデックス 4 の文字を削除するには、次の例を実行します。コードと出力例の文字列は英語表記のままです。

このセクションのコードと表示されるラベルや出力は英語のままです。

const original = "DelftStack";
const index = 4;
const result = original.slice(0, index) + original.slice(index + 1);
console.log(result);
DelfStack

再利用できる関数にする場合は、スライスを連結する前に、インデックスが 0 から text.length - 1 までの整数であることを確認してください。この式では、文字列の長さと等しいか、それより大きいインデックスを指定すると、文字列はそのままになります。負のインデックスでは slice() の動作が異なり、末尾から数えた位置の文字を削除できます。そのため、範囲外の値なら常に何も起きないと考えず、インデックスを検証してください。JavaScript の文字列インデックスは UTF-16 コード単位を基準にします。サロゲートペアで表される見た目上1つの記号が、2つのインデックスを占める場合があります。

最初に一致した文字だけを replace() で削除する

検索値に文字列を指定すると、replace() は最初に一致した箇所だけを削除します。最初の一致だけを削除したい場合に使える簡潔な方法です。グローバル正規表現の例と比べると、最初の t は消えますが、後にある t は残ります。一致する文字をすべて削除する場合は、代わりに g フラグ付きの正規表現を使います。

最初に一致した t だけを削除するには、次の例を実行します。コードと出力例の文字列は英語表記のままです。

このセクションのコードと表示されるラベルや出力は英語のままです。

const original = "DelftStack";
const result = original.replace("t", "");
console.log(result);
DelfStack

これらの方法は文字列を返すため、結果を変数に保存したり、別の関数に渡したり、let で宣言した変数に再代入したりできます。const の束縛に入った文字列自体は変更されません。const が禁止するのは変数への再代入であり、文字列の値は不変です。変換を繰り返す場合は、一致条件が最も分かりやすい方法を選び、その戻り値を次の操作に渡してください。replace() などの検索ベースの方法では、検索値が見つからないと文字列は変わりません。位置ベースの削除では、インデックスが有効なら、その位置の文字が削除されます。