JavaScript

String.prototype.substring()メソッド

 編集:2022.08.16 by T.A.

その String の、指定位置範囲の文字列を返します。

構文
string= String.substring(indexStart[, indexEnd] )
String String
indexStart 返される部分文字列の、最初の文字を含んだ位置です。
indexEnd 返される部分文字列から外される最初の文字の位置です。
戻り値

String。与えられた文字列から抽出された区間を含む新しい文字列です。

解説

substring() は indexStart から indexEnd の直前までの文字を取り出します。特に、

引数が 0 未満、または stringName.length を超えた場合、それはそれぞれ 0 と stringName.length として扱われます。

いずれかの引数が NaN の場合、それは 0 として扱われます。

以下の例では substring() を使用して、「Mozilla」という文字列から文字を取り出して表示します。

let Str='Mozilla';
D=Str.substring(0, 1); //="M"
D=Str.substring(1, 0); //=""
D=Str.substring(0, 6); //="Mozill"
D=Str.substring(4);    //="lla"
D=Str.substring(4, 7); //="lla"
D=Str.substring(7, 4); //="lla"
D=Str.substring(0, 7); //="Mozilla"
D=Str.substring(0, 10); //="Mozilla"
substring() と length プロパティの使用

次の例では substring() メソッドと length プロパティを使用して、特定の文字列の最後の文字を抜き出しています。この方法では、上記の例と同じようあなたが最初と最後の位置を知っている必要がないこと考えると、覚えやすいかもしれません。

// 最後の 4 文字の 'illa' を表示します
let Str='Mozilla';
D=Str.substring(Str.length - 4); //="illa"
substring() と substr() の違い

substring() メソッドと substr() メソッドとの間には微妙な違いがあるので、混乱しないように注意してください。

substring() の引数は開始位置と終了位置を表しますが、substr() の引数は開始位置と返される文字列に含まれる文字数を表します。

さらに、substr() は ECMAScript の古い機能とみなされており、将来のバージョンでは削除される可能性があるため、できれば使用しないのが最良です。

let S='Mozilla';
D=S.substring(2,5);  //="zil"
D=S.substr(2,3);     //="zil"
substring() と slice() の違い

substring() メソッドと slice() メソッドはほぼ同じですが、特に負の数の引数の扱いについて、いくつかの微妙な違いがあります。

substring() メソッドは indexStartindexEnd よりも大きい場合に二つの引数を交換するので、文字列が返されます。slice() メソッドはこの場合には空文字列を返します。

let S='Mozilla';
D=S.substring(5, 2); //="zil"
D=S.slice(5, 2);     //=""

//どちらかまたは両方の引数が負の数または NaN であった場合、substring() メソッドはこれらを 0 として扱います:
D=S.substring(-5, 2);  //="Mo"
D=S.substring(-5, -2); //=""

//slice() も NaN の引数を 0 として扱いますが、負の数を指定した場合は、文字列の末尾からの文字数で位置を探します:
D=S.slice(-5, 2);  //=""
D=S.slice(-5, -2); //="zil"
文字列内の部分文字列の置き換え

次の例は、文字列内の部分文字列を置き換えます。これは単独の文字と部分文字列の両方を置き換えます。例の最後にある関数呼び出しは、Brave New World という文字列を Brave New Web に置き換えます。

// fullS という文字列内で oldS を newS に置き換えます。
function replaceString(oldS, newS, fullS) {
  for (let i = 0; i < fullS.length; ++i) {
    if (fullS.substring(i, i + oldS.length) == oldS) {
      fullS = fullS.substring(0, i) + newS + fullS.substring(i + oldS.length, fullS.length)
    }
  }
  return fullS
}

D=replaceString('World', 'Web', 'Brave New World');

なお、これは oldS が newS の部分文字列である場合に無限ループに陥ります。― 例えば、'World' を 'OtherWorld' で置き換える場合などです。

置き換えるのにより良い方法は以下の通りです。

function replaceString(oldS, newS, fullS) {
  return fullS.split(oldS).join(newS)
}

上述のコードは、substring の操作の例を提供します。部分文字列を置き換える必要があるとき、多くの場合 String.prototype.replace() を使用します。

関連

String.slice()substr()String.substring()


テスト