2011-09-27 17 views
8

Powiedzmy mam URL:JavaScript indexOf() - jak uzyskać specyficzny wskaźnik

http://something.com/somethingheretoo 

i chcę dostać co po 3 instancji /?

coś podobnego do odpowiednika indexOf(), które pozwala mi wprowadzić odpowiednią instancję lewego ukośnika odwrotnego.

+0

Więc co to za pytanie? Co próbujesz? Pytanie pokazuje niewielki lub żaden wysiłek od ciebie. – J0HN

+0

Próbowałem googling i nic nie dostałem. –

+0

Czy próbowałeś napisać samemu? :) – J0HN

Odpowiedz

5

Jeśli wiesz, że zaczyna się http:// lub https://, po prostu pominąć tę część z tego jedną wkładką:

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

Daje to większą elastyczność w przypadku wielu ukośniki w tym segmencie chcesz.

1

Jeśli chcesz trzymać się 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); 

Jeśli chcesz uzyskać ścieżkę tego danego adresu URL, można również użyć RE:

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

Ta RE dla " // ", akceptuje wszystko pomiędzy" // "a następnym" / "i zwraca obiekt. Ten obiekt ma kilka właściwości. propery [1] zawiera podłańcuch po trzecim /.

+0

używanie podziału jest krótsze i łatwiejsze do odczytania. – PiTheNumber

0

W twoim przypadku możesz użyć metody lastIndexOf(), aby uzyskać trzeci ukośnik w przód.

+5

Ostatni nie jest taki sam jak trzeci, nawet jeśli wydaje się tak w przykładzie. – Stefan

+0

To prawda, ale na pytanie OP, założyłem, że chce ostatniej części ścieżki i użył frazy "W twoim przypadku" :) – Pat

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

Po trzecim '/' nie oznacza "między trzecim a czwartym" – J0HN

+0

nie duża rzecz. patrz wyżej. – PiTheNumber

+0

Zobacz mój komentarz poniżej, pod adresem http://stackoverflow.com/questions/7570276/javascript-indexof-how-to-get-specific-index/7570349#7570349. –

1

Innym podejściem jest użycie javascript "split" funkcję:

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

splittedWord [0] wróci "ja"

splittedWord [1] wróci "ty"

splittedWord [2] zwróci "coś"

+1

'var strWord =" ja/ty/coś/haha ​​"'. 'splittedWord [3]' = "something", a OP chce dopasować "coś/haha". –

1

Brzmi tak, jak chcesz pathname. Jeśli jesteś w przeglądarce, miej pod ręką elementu a ...

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

... i niech to zrobić parsowania dla Ciebie.

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

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

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

+1

fajnie! lubię to – epoch

0

Podaj np następującego wzoru, który powróci indeksowi n występowania łańcuch wyszukiwania S lub -1, jeśli jest n-1 lub mniej dopasowania .

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" 

Oczywiście jeśli nie chcesz, aby dodać funkcję do String.prototype można mieć go w funkcji stand-alone, dodając kolejny parametr przekazać w ciągu chcesz przeszukać.