JavaScript indexOf() - how to get specific index

前端 未结 8 581
野趣味
野趣味 2021-01-18 02:02

Let\'s say I have a URL:

http://something.com/somethingheretoo

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

相关标签:
8条回答
  • 2021-01-18 02:22

    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/

    0 讨论(0)
  • 2021-01-18 02:23

    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.

    0 讨论(0)
  • 2021-01-18 02:28

    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 /.

    0 讨论(0)
  • 2021-01-18 02:31

    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"

    0 讨论(0)
  • 2021-01-18 02:32

    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.

    0 讨论(0)
  • 2021-01-18 02:35

    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"
    
    0 讨论(0)
提交回复
热议问题