JavaScript indexOf () - как получить конкретный индекс - PullRequest
8 голосов
/ 27 сентября 2011

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

http://something.com/somethingheretoo

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

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

Ответы [ 8 ]

7 голосов
/ 27 сентября 2011

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

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

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

3 голосов
/ 27 сентября 2011
s = 'http://something.com/somethingheretoo';
parts = s.split('/');
parts = parts.slice(0, 2);
return parts.join('/');
1 голос
/ 27 сентября 2011

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

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

... и пусть это сделает для вас разбор.

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

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

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

1 голос
/ 27 сентября 2011

Другой подход заключается в использовании функции разделения Javascript:

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

splittedWord [0] вернет «я»

splittedWord [1] вернет «вы»

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

1 голос
/ 27 сентября 2011

Если вы хотите придерживаться 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 ищет «//», принимает что-либо между «//» и следующим «/» и возвращает объект. Этот объект имеет несколько свойств. собственность [1] содержит подстроку после третьей /.

0 голосов
/ 22 апреля 2013

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

Я предпочитаю предлагаемые решения

var url = "http://blablab/test/page.php";
alert(url.split("/")[3]);
//-> "test"
0 голосов
/ 27 сентября 2011

Попробуйте что-то вроде следующей функции, которая будет возвращать индекс 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"

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

0 голосов
/ 27 сентября 2011

В вашем случае вы можете использовать метод lastIndexOf(), чтобы получить 3-й слеш.

...