JavaScript indexOf () - как получить конкретный индекс

допустим, у меня есть URL:

http://something.com/somethingheretoo

и я хочу получить то, что после 3-й экземпляр /?

что-то вроде эквивалента indexOf() что позволяет мне ввести, какой экземпляр обратной косой черты я хочу.

8 ответов


Если вы знаете, что начинается с http:// или https://, просто пропустите эту часть с этим шутка:

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

Это дает вам больше гибкости, если в этом сегменте есть несколько косых черт.


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

если вы хотите придерживаться 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);

если вы хотите получить путь к этому URL-адресу, вы также можете использовать RE:

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

это RE ищет "//", признает, что между "//" и далее "/", и возвращает объект. Этот объект имеет несколько свойств. propery [1] содержит подстроку после третьего /.


другой подход-использовать функцию Javascript "split":

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

splittedWord[0] вернет "me"

splittedWord[1] вернет "you"

splittedWord[2] вернет "что-то"


похоже, вы хотите pathname. Если вы находитесь в браузере, держите a элемент удобная...

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

...и пусть он сделает анализ за вас.

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

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

демо: http://jsfiddle.net/2qT9c/


в вашем случае вы можете использовать lastIndexOf() метод для получения 3-й прямой косой черты.


попробуйте что-то вроде следующей функции, которая вернет индекс n-го вхождения строки поиска s, или -1, если есть n-1 или меньше совпадений.

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"

конечно, если вы не хотите, чтобы добавить функцию в строку.prototype вы можете использовать его как автономную функцию, добавив другой параметр для передачи строки, в которой вы хотите выполнить поиск.


вот очень хороший способ справиться с этим: Как я могу удалить все символы до и включая 3-ю косую черту в строке?

мое предпочтение предлагаемых решений -

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