このページにスクリプトエラーがあります。サイト編集者によって解決されるまでの間は、以下の部分的な内容のみが表示可能です。

{{JSRef}}

警告: String.prototype.substr(…) は(「Web標準からの削除」のように)厳密には推奨されていませんが、従来の関数と見なされているので可能な限り避けるべきです。これはコア JavaScript 言語の一部ではなく、将来削除される可能性があります。可能であれば、代わりに {{jsxref("string.prototype.substring()", "substring()")}} メソッドを使ってください。

substr() メソッドは、文字列内における文字を、指定した位置から指定した数だけ返します。

{{EmbedInteractiveExample("pages/js/string-substr.html")}}

構文

str.substr(start[, length])

引数

start
文字を取り出す位置( 0 から文字列の長さ以下までの整数)。負の数が与えられた場合、strLength + start のように扱われる。strLength は文字列の長さ(たとえば、start が -3 の場合、strLength - 3 のように扱われる)。
length
任意です。取り出す文字の数です。

戻り値

与えられた文字列の抽出されたセクションを含む新しい文字列です。length0 や負の数の場合、空文字列が返される。

詳細

start は文字のインデックスです。一番最初の文字のインデックスは、0 で、最後の文字のインデックスは、文字列の長さから 1 を引いた数です。substr は、start から文字の取り出しを開始し、length 個の文字を集めます(start から文字列の最後までの長さが指定した length より短かった場合は、length より少ない数の文字を返すでしょう)。

start が正の数かつ文字列の長さ以上である場合、substr は空の文字列を返します。

start が負の数である場合、substr はそれを文字列の最後から数えた文字のインデックスとして使用します。start が負の数かつ start の絶対値が文字列の長さより大きい場合、substr は開始インデックスとして 0 を使用します。注: start の引数に負の数の値を指定することは、Microsoft JScript ではサポートされません
JScript では start に負の数を指定した場合、正の数として扱われます

length が 0 あるいは負の数の場合、substr は空の文字列を返します。length が省略された場合、start から文字列の最後までの文字を取り出します。

substr() を使う

var aString = 'Mozilla';

console.log(aString.substr(0, 1));   // 'M'
console.log(aString.substr(1, 0));   // ''
console.log(aString.substr(-1, 1));  // 'a'
console.log(aString.substr(1, -1));  // ''
console.log(aString.substr(-3));     // 'lla'
console.log(aString.substr(1));      // 'ozilla'
console.log(aString.substr(-20, 2)); // 'Mo'
console.log(aString.substr(20, 2));  // ''

ポリフィル

Microsoft の JScript は start インデックスとして負の数をサポートしません。この機能を使用したい場合、このバグを回避するために、次の互換コードを使用できます:

// only run when the substr() function is broken
if ('ab'.substr(-1) != 'b') {
  /**
   *  Get the substring of a string
   *  @param  {integer}  start   where to start the substring
   *  @param  {integer}  length  how many characters to return
   *  @return {string}
   */
  String.prototype.substr = function(substr) {
    return function(start, length) {
      // call the original method
      return substr.call(this,
      	// did we get a negative start, calculate how much it is from the beginning of the string
        // adjust the start parameter for negative value
        start < 0 ? this.length + start : start,
        length)
    }
  }(String.prototype.substr);
}

仕様

仕様 ステータス コメント
{{SpecName('ES3')}} {{Spec2('ES3')}} JavaScript 1.0 で実装。(参考)互換性の付録 B に定義されている。
{{SpecName('ES5.1', '#sec-B.2.3', 'String.prototype.substr')}} {{Spec2('ES5.1')}} (参考)互換性の付録 B に定義されている。
{{SpecName('ES6', '#sec-string.prototype.substr', 'String.prototype.substr')}} {{Spec2('ES6')}} (参考)ウェブブラウザーの ECMAScript 機能追加のための互換性の付録 B に定義されている。
{{SpecName('ESDraft', '#sec-string.prototype.substr', 'String.prototype.substr')}} {{Spec2('ESDraft')}} (参考)ウェブブラウザーの ECMAScript 機能追加のための互換性の付録 B に定義されている。

ブラウザー実装状況

{{Compat("javascript.builtins.String.substr")}}

関連情報

  • {{jsxref("String.prototype.slice()")}}
  • {{jsxref("String.prototype.substring()")}}

ドキュメントのタグと貢献者

最終更新者: mdnwebdocs-bot,