mozilla

Revision 6063 of String.prototype.substring()

  • Revision slug: JavaScript/Reference/Global_Objects/String/substring
  • Revision title: substring
  • Revision id: 6063
  • Created:
  • Creator: akavlie
  • Is current revision? No
  • Comment Add warning about replaceString method, and an alternative from Stack Overflow; 66 words added

Revision Content

 

Summary

Returns a subset of a string between one index and another, or through the end of the string.

Method of String
Implemented in JavaScript 1.0
ECMAScript Edition ECMAScript 1st Edition

Syntax

string.substring(indexA[, indexB])

Parameters

indexA
An integer between 0 and one less than the length of the string.
indexB
(optional) An integer between 0 and the length of the string.

Description

substring extracts characters from indexA up to but not including indexB. In particular:

  • If indexA equals indexB, substring returns an empty string.
  • If indexB is omitted, substring extracts characters to the end of the string.
  • If either argument is less than 0 or is NaN, it is treated as if it were 0.
  • If either argument is greater than stringName.length, it is treated as if it were stringName.length.

If indexA is larger than indexB, then the effect of substring is as if the two arguments were swapped; for example, str.substring(1, 0) == str.substring(0, 1).

Examples

Example: Using substring

The following example uses substring to display characters from the string "Mozilla":

// assumes a print function is defined
var anyString = "Mozilla";

// Displays "Moz"
print(anyString.substring(0,3));
print(anyString.substring(3,0));

// Displays "lla"
print(anyString.substring(4,7));
print(anyString.substring(7,4));

// Displays "Mozill"
print(anyString.substring(0,6));

// Displays "Mozilla"
print(anyString.substring(0,7));
print(anyString.substring(0,10));

Example: Replacing a substring within a string

The following example replaces a substring within a string. It will replace both individual characters and substrings. The function call at the end of the example changes the string "Brave New World" into "Brave New Web".

function replaceString(oldS, newS, fullS) {
// Replaces oldS with newS in the string fullS
   for (var 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;
}

replaceString("World", "Web", "Brave New World");

Note that this can result in an infinite loop if oldS is itself a substring of newS -- for example, if you attempted to replace "World" with "OtherWorld" here. A better method for replacing strings is as follows:

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

See also

substr, slice

{{ languages( { "es": "es/Referencia_de_JavaScript_1.5/Objetos_globales/String/substring", "ja": "ja/Core_JavaScript_1.5_Reference/Global_Objects/String/substring", "pl": "pl/Dokumentacja_j\u0119zyka_JavaScript_1.5/Obiekty/String/substring" } ) }}

Revision Source

<p> </p>
<h3 name="Summary">Summary</h3>
<p>Returns a subset of a <code>string between one index </code>and another, or through the end of the string.</p>
<table class="standard-table"> <thead> <tr> <th class="header" colspan="2">Method of <a href="/en/JavaScript/Reference/Global_Objects/String" title="en/JavaScript/Reference/Global_Objects/String"><code>String</code></a></th> </tr> </thead> <tbody> <tr> <td>Implemented in</td> <td>JavaScript 1.0</td> </tr> <tr> <td>ECMAScript Edition</td> <td>ECMAScript 1st Edition</td> </tr> </tbody>
</table>
<h3 name="Syntax">Syntax</h3>
<p><code><em>string</em>.substring(<em>indexA</em>[, <em>indexB</em>])</code></p>
<h3 name="Parameters">Parameters</h3>
<dl> <dt><code>indexA</code></dt> <dd>An integer between 0 and one less than the length of the string.</dd>
</dl>
<dl> <dt><code>indexB</code></dt> <dd>(optional) An integer between 0 and the length of the string.</dd>
</dl>
<h3 name="Description">Description</h3>
<p><code>substring</code> extracts characters from <code>indexA</code> up to but not including <code>indexB</code>. In particular:</p>
<ul> <li>If <code>indexA</code> equals <code>indexB</code>, <code>substring</code> returns an empty string.</li> <li>If <code>indexB</code> is omitted, <code>substring</code> extracts characters to the end of the string.</li> <li>If either argument is less than 0 or is <code>NaN</code>, it is treated as if it were 0.</li> <li>If either argument is greater than <code>stringName.length</code>, it is treated as if it were <code>stringName.length</code>.</li>
</ul>
<p>If <code>indexA</code> is larger than <code>indexB</code>, then the effect of <code>substring</code> is as if the two arguments were swapped; for example, <code><em>str</em>.substring(1, 0) == <em>str</em>.substring(0, 1)</code>.</p>
<h3 name="Examples">Examples</h3>
<h4 name="Example:_Using_substring">Example: Using <code>substring</code></h4>
<p>The following example uses <code>substring</code> to display characters from the string "<code>Mozilla</code>":</p>
<pre class="eval">// assumes a print function is defined
var anyString = "Mozilla";

// Displays "Moz"
print(anyString.substring(0,3));
print(anyString.substring(3,0));

// Displays "lla"
print(anyString.substring(4,7));
print(anyString.substring(7,4));

// Displays "Mozill"
print(anyString.substring(0,6));

// Displays "Mozilla"
print(anyString.substring(0,7));
print(anyString.substring(0,10));
</pre>
<h4 name="Example:_Replacing_a_substring_within_a_string">Example: Replacing a substring within a string</h4>
<p>The following example replaces a substring within a string. It will replace both individual characters and substrings. The function call at the end of the example changes the string "<code>Brave New World</code>" into "<code>Brave New Web</code>".</p>
<pre class="eval">function replaceString(oldS, newS, fullS) {
// Replaces oldS with newS in the string fullS
   for (var i = 0; i &lt; 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;
}

replaceString("World", "Web", "Brave New World");</pre>
<p>Note that this can result in an infinite loop if <code>oldS</code> is itself a substring of <code>newS</code> -- for example, if you attempted to replace "World" with "OtherWorld" here. A better method for replacing strings is as follows:</p>
<pre class="default prettyprint"><code><span class="kwd" style="font-family: 'Courier New', 'Andale Mono', monospace; line-height: normal; white-space: pre; background-color: rgb(246, 246, 242); ">function</span><span class="pln" style="font-family: 'Courier New', 'Andale Mono', monospace; line-height: normal; white-space: pre; background-color: rgb(246, 246, 242); "> replaceString</span><span class="pun" style="font-family: 'Courier New', 'Andale Mono', monospace; line-height: normal; white-space: pre; background-color: rgb(246, 246, 242); ">(</span><span class="pln" style="font-family: 'Courier New', 'Andale Mono', monospace; line-height: normal; white-space: pre; background-color: rgb(246, 246, 242); ">oldS</span><span class="pun" style="font-family: 'Courier New', 'Andale Mono', monospace; line-height: normal; white-space: pre; background-color: rgb(246, 246, 242); ">,</span><span class="pln" style="font-family: 'Courier New', 'Andale Mono', monospace; line-height: normal; white-space: pre; background-color: rgb(246, 246, 242); "> newS</span><span class="pun" style="font-family: 'Courier New', 'Andale Mono', monospace; line-height: normal; white-space: pre; background-color: rgb(246, 246, 242); ">,</span><span class="kwd" style="font-family: 'Courier New', 'Andale Mono', monospace; line-height: normal; white-space: pre; background-color: rgb(246, 246, 242); ">fullS</span><span class="pun" style="font-family: 'Courier New', 'Andale Mono', monospace; line-height: normal; white-space: pre; background-color: rgb(246, 246, 242); ">){</span></code>
<code><span class="pln">    </span><span class="kwd">return</span><span class="pln"> fullS</span><span class="pun">.</span><span class="pln">split</span><span class="pun">(</span><span class="pln">oldS</span><span class="pun">).</span><span class="pln">join</span><span class="pun">(</span><span class="kwd">newS</span><span class="pun">);</span>
<span class="pun">}</span>
</code></pre>

<h3 name="See_also">See also</h3>
<p><a href="/en/JavaScript/Reference/Global_Objects/String/substr" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/substr">substr</a>, <a class="internal" href="/en/JavaScript/Reference/Global_Objects/String/slice" title="En/Core JavaScript 1.5 Reference/Global Objects/String/Slice">slice</a></p>
<p>{{ languages( { "es": "es/Referencia_de_JavaScript_1.5/Objetos_globales/String/substring", "ja": "ja/Core_JavaScript_1.5_Reference/Global_Objects/String/substring", "pl": "pl/Dokumentacja_j\u0119zyka_JavaScript_1.5/Obiekty/String/substring" } ) }}</p>
Revert to this revision