77

the most darndest thing! the following code prints out 'llo' instead of the expected 'wo'. i get such surprising results for a few other numbers. what am i missing here?

alert('helloworld'.substring(5, 2));
Akira Yamamoto
  • 4,685
  • 4
  • 42
  • 43
akula1001
  • 4,576
  • 12
  • 43
  • 56

6 Answers6

104

You're confusing substring() and substr(): substring() expects two indices and not offset and length. In your case, the indices are 5 and 2, ie characters 2..4 will be returned as the higher index is excluded.

Christoph
  • 164,997
  • 36
  • 182
  • 240
60

You have three options in Javascript:

//slice
//syntax: string.slice(start [, stop])
"Good news, everyone!".slice(5,9); // extracts 'news'

//substring 
//syntax: string.substring(start [, stop])
"Good news, everyone!".substring(5,9); // extracts 'news'

//substr
//syntax: string.substr(start [, length])
"Good news, everyone!".substr(5,4); // extracts 'news'
Chirag
  • 4,046
  • 1
  • 33
  • 24
17

Check the substring syntax:

substring(from, to)

from Required. The index where to start the extraction. First character is at index 0

to Optional. The index where to stop the extraction. If omitted, it extracts the rest of the string

I'll grant you it's a bit odd. Didn't know that myself.

What you want to do is

alert('helloworld'.substring(5, 7));
Pekka
  • 442,112
  • 142
  • 972
  • 1,088
2

See syntax below:

str.substring(indexA, [indexB])

If indexA > indexB, the substring() function acts as if arguments were reversed.

Consider documentation here: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/substring

andr
  • 15,970
  • 10
  • 45
  • 59
Alexandru Diacov
  • 1,181
  • 14
  • 15
2
alert('helloworld'.substring(5, 2));

The code above is wrong because the first value is the start point to the end point.E.g move from char 5 which is o and go to char 2 which is the l so will get llo So you have told it to go backwards.

What yuou want is

alert('helloworld'.substring(5, 7));
AutomatedTester
  • 22,188
  • 7
  • 49
  • 62
0

This is what I have done...

var stringValue = 'Welcome to India';

// if you want take get 'India' 
// stringValue.substring(startIndex, EndIndex)
   stringValue.substring(11, 16); // O/p 'India'
HoldOffHunger
  • 18,769
  • 10
  • 104
  • 133
Nayas Subramanian
  • 2,269
  • 21
  • 28