Itai Sagi
Itai Sagi

Reputation: 5615

JavaScript indexOf() - how to get specific index

Let's say I have a URL:

http://something.com/somethingheretoo

and I want to get what's after the 3rd instance of /?

something like the equivalent of indexOf() which lets me input which instance of the backslash I want.

Upvotes: 9

Views: 12068

Answers (9)

PiTheNumber
PiTheNumber

Reputation: 23542

let s = 'http://something.com/somethingheretoo';
parts = s.split('/');
parts.splice(0, 2);
return parts.join('/');

Upvotes: 4

piotros
piotros

Reputation: 635

Inestead of using indexOf it is possible to do this this way:

const url = 'http://something.com/somethingheretoo';
const content = new URL(url).pathname.slice(1);

Upvotes: 0

erlingormar
erlingormar

Reputation: 461

Here's a very cool way of handling this: How can I remove all characters up to and including the 3rd slash in a string?

My preference of the proposed solutions is

var url = "http://blablab/test/page.php";
alert(url.split("/")[3]);
//-> "test"

Upvotes: 0

nnnnnn
nnnnnn

Reputation: 150010

Try something like the following function, which will return the index of the nth occurrence of the search string s, or -1 if there are n-1 or fewer matches.

String.prototype.nthIndexOf = function(s, n) {
  var i = -1;
  while(n-- > 0 && -1 != (i = this.indexOf(s, i+1)));
  return i;
}

var str = "some string to test";

alert(str.nthIndexOf("t", 3)); // 15
alert(str.nthIndexOf("t", 7)); // -1
alert(str.nthIndexOf("z", 4)); // -1

var sub = str.substr(str.nthIndexOf("t",3)); // "test"

Of course if you don't want to add the function to String.prototype you can have it as a stand-alone function by adding another parameter to pass in the string you want to search in.

Upvotes: 2

user113716
user113716

Reputation: 322462

It sounds like you want the pathname. If you're in a browser, keep an a element handy...

var _a = document.createElement('a');

...and let it do the parsing for you.

_a.href = "http://something.com/somethingheretoo";

alert( _a.pathname.slice(1) );  // somethingheretoo

DEMO: http://jsfiddle.net/2qT9c/

Upvotes: 1

Kelly
Kelly

Reputation: 41501

If you know it starts with http:// or https://, just skip past that part with this one-liner:

var content = aURL.substring(aURL.indexOf('/', 8));

This gives you more flexibility if there are multiple slashes in that segment you want.

Upvotes: 8

bjornruysen
bjornruysen

Reputation: 850

Another approach is to use the Javascript "split" function:

var strWord = "me/you/something";
var splittedWord = strWord.split("/");

splittedWord[0] would return "me"

splittedWord[1] would return "you"

splittedWord[2] would return "something"

Upvotes: 1

Pat
Pat

Reputation: 25675

In your case, you could use the lastIndexOf() method to get the 3rd forward slash.

Upvotes: 0

Rob W
Rob W

Reputation: 348972

If you want to stick to indexOf:

var string = "http://something/sth1/sth2/sth3/"
var lastIndex = string.indexOf("/", lastIndex);
lastIndex = string.indexOf("/", lastIndex);
lastIndex = string.indexOf("/", lastIndex);
string = string.substr(lastIndex);

If you want to get the path of that given URL, you can also use a RE:

string = string.match(/\/\/[^\/]+\/(.+)?/)[1];

This RE searches for "//", accepts anything between "//" and the next "/", and returns an object. This object has several properties. propery [1] contains the substring after the third /.

Upvotes: 1

Related Questions