URL의 마지막 세그먼트


228

URL의 마지막 세그먼트는 어떻게 얻습니까? 클릭 한 앵커 태그의 전체 URL을 표시하는 다음 스크립트가 있습니다.

$(".tag_name_goes_here").live('click', function(event)
{
    event.preventDefault();  
    alert($(this).attr("href"));
});

URL이

http://mywebsite/folder/file

경고 상자에 URL의 "파일"부분 만 표시하려면 어떻게합니까?


아래는 작동중인 자바 스크립트 솔루션입니다. stackoverflow.com/a/38370175/610951
Ravi Shankar Kota

답변:


369

lastIndexOf () 함수를 사용 /하여 URL 에서 문자 의 마지막 항목을 찾은 다음 substring () 함수를 사용하여 해당 위치에서 시작하는 하위 문자열을 반환 할 수도 있습니다.

console.log(this.href.substring(this.href.lastIndexOf('/') + 1));

그렇게하면 모든 URL 세그먼트가 포함 된 배열을 만들지 않아도됩니다 split().


3
@oshirowanen, 아니요, 각 URL 세그먼트에서 배열 요소를 만듭니다. 마지막 세그먼트에만 관심이 있기 때문에 절대 사용하지 않을 많은 배열 요소를 할당하는 것은 낭비 일 수 있습니다.
프레데릭 하 미디

11
URL이 같이 될 경우 그러나 admin/store/tour/-1/그래서는 것입니다 ''문자열?
Kyar Wa Lar

1
@Set, 더 좋고, 느리게 확실히.
Frédéric Hamidi

1
URL /끝에 끝에 가 포함되어 있으면 어떻게 합니까?
Sнаđошƒаӽ

6
담당자 : @Set Kyar Wa Lar Aug 및 @ Sнаđошƒаӽ /끝에 포함 된 URL에 대한 솔루션 :var url = window.location.href.replace(/\/$/, ''); /* remove optional end / */ var lastSeg = url.substr(url.lastIndexOf('/') + 1);
Ross

151

var parts = 'http://mywebsite/folder/file'.split('/');
var lastSegment = parts.pop() || parts.pop();  // handle potential trailing slash

console.log(lastSegment);


작동 방식을 설명해 주시겠습니까? 내 지식에 따라 배열의 마지막 요소를 제거하는 데 사용되는 .pop (). 하지만 여기에 내 URL의 마지막 요소가 표시되었습니다 !!
Inspire Shahin

1
Split은 URL의 각 섹션을 '/'로 구분하여 배열을 URL로 변환합니다. 따라서 마지막 세그먼트는 url과 이후에 생성 된 배열의 마지막 요소입니다.
stephen

10
URL이 "/"로 끝나는 경우 작동하지 않습니다.http://mywebsite/folder/file/
Peter Ludlow

@PeterLudlow Chrome 76에서 작동합니다. 좀 더 자세히 설명해주세요
zyrup

1
@PeterLudlow JS 추상 "" == false에서 빈 문자열이 거짓이기 때문에 작동합니다.이 경우 배열의 일부를 빈 문자열로

86
window.location.pathname.split("/").pop()

2
간단하고 쉽습니다. 감사.
krezaeim

3
완벽하고 깔끔하며 훌륭합니다
Babak Habibi

1
아름답고 깨끗한 응답
Zarkys Salas

1
이것이 바로 내가 찾던 것입니다. react-router-dom을 사용하면 마지막 슬래시 뒤에 오는 URL의 마지막 부분을 찾는 가장 깨끗한 솔루션이었습니다 /. console.log(history.location.pathname.split("/").pop()) 더 좋은 방법이 있다면 알고 싶습니다! 이 의견이 더 많은 사람들을 귀하의 답변으로 이끌 수 있기를 바랍니다. 감사합니다 @ Dblock247
Tralawar

참고 : URL에 검색어 매개 변수가 설정된 경우 (예 :) 작동하지 않습니다 .../file?var=value&foo=bar. 이 솔루션은보다 강력하고 현대적인 방법으로이 문제를 해결합니다. stackoverflow.com/a/51795122/1123743
Sebastian Barth

30

정규식을 사용하는 또 다른 솔루션입니다.

var href = location.href;
console.log(href.match(/([^\/]*)\/*$/)[1]);

고맙습니다 :).
Salil Sharma

18

Javascript에는 문자열 객체와 관련된 함수 분할 기능이 있으므로 다음을 수행 할 수 있습니다.

var url = "http://mywebsite/folder/file";
var array = url.split('/');

var lastsegment = array[array.length-1];

17

경로가 단순하고 간단한 경로 요소로만 구성된 경우 다른 답변이 효과가있을 수 있습니다. 그러나 쿼리 매개 변수도 포함하면 중단됩니다.

보다 강력한 솔루션을 얻으려면 대신 URL 객체를 사용 하는 것이 좋습니다. 현재 URL을 해석 한 것입니다.

입력: const href = 'https://stackoverflow.com/boo?q=foo&s=bar'

const segments = new URL(href).pathname.split('/');
const last = segments.pop() || segments.pop(); // Handle potential trailing slash
console.log(last);

산출: 'boo'

이것은 모든 일반적인 브라우저에서 작동합니다. 죽어가는 IE만이 지원하지 않으며 지원하지 않습니다. IE의 경우 폴리 필이 가능합니다 (만약 관심이 있다면 ).



8
var urlChunks = 'mywebsite/folder/file'.split('/');
alert(urlChunks[urlChunks.length - 1]);

5

너무 늦었지만 다른 사람들에게는 PURL jquery plugin 사용을 적극 권장합니다 . PURL의 동기는 URL 도 '#' 으로 분류 할 수 있다는 것입니다 (예 : angular.js 링크).

    http://test.com/#/about/us/

또는

    http://test.com/#sky=blue&grass=green

그리고 PURL을 사용하면 원하는 세그먼트를 쉽게 결정할 수 있습니다 (세그먼트 / fsegment).

"클래식"마지막 세그먼트의 경우 다음과 같이 작성할 수 있습니다.

    var url = $.url('http://test.com/dir/index.html?key=value');
    var lastSegment = url.segment().pop(); // index.html

4

자바 스크립트 만 사용하여 Frédéric의 답변을 바탕으로 :

var url = document.URL

window.alert(url.substr(url.lastIndexOf('/') + 1));

3

또한,

var url = $(this).attr("href");
var part = url.substring(url.lastIndexOf('/') + 1);

3

split을 사용하여 추가 요소를 생성하는 것에 대해 걱정하지 않으면 filter는 후행 슬래시에 대해 언급 한 문제를 처리 할 수 ​​있습니다 (필터에 대한 브라우저 지원이 있다고 가정).

url.split('/').filter(function (s) { return !!s }).pop()

3
// Store original location in loc like: http://test.com/one/ (ending slash)
var loc = location.href; 
// If the last char is a slash trim it, otherwise return the original loc
loc = loc.lastIndexOf('/') == (loc.length -1) ? loc.substr(0,loc.length-1) : loc.substr(0,loc.lastIndexOf('/'));
var targetValue = loc.substr(loc.lastIndexOf('/') + 1);

targetValue = 하나

URL이 다음과 같은 경우 :

http://test.com/one/

또는

http://test.com/one

또는

http://test.com/one/index.htm

그런 다음 loc은 다음과 같이 보입니다 : http://test.com/one

이제 마지막 항목을 원하므로 다음 단계를 실행하여 원래 원하는 값 (targetValue)을로드하십시오.

var targetValue = loc.substr(loc.lastIndexOf('/') + 1);

하지만 "와 나는 아마 미스 뭔가 test.com/one "처럼 보이는 최대 "LOC 종료 test.com ". 나는 다음과 같아야한다고 생각합니다 : if (loc.lastIndexOf ( '/') == (loc.length -1)) {loc = loc.substr (0, loc.length-1)} else {var isFile = loc. substr (loc.lastIndexOf ( '/'), loc.length) .indexOf ( '.')! = -1; if (isFile) loc = loc.substr (0, loc.lastIndexOf ( '/')); }
Allan Raquin

search또는에 슬래시가 있으면 실패합니다 hash.
Walf

3
window.alert(this.pathname.substr(this.pathname.lastIndexOf('/') + 1));

기본 pathname속성은 가장 단순하며 브라우저에서 이미 구문 분석 및 분석되었으므로 사용하십시오 . $(this).attr("href")다음과 같은 값을 반환 할 수 있습니다../..올바른 결과를 제공하지 않는 있습니다.

searchand 를 유지해야하는 경우 hash(예 : foo?bar#bazfrom http://quux.com/path/to/foo?bar#baz) 다음을 사용하십시오.

window.alert(this.pathname.substr(this.pathname.lastIndexOf('/') + 1) + this.search + this.hash);

또한 pathname쿼리 매개 변수 를 제거하지만 추가 href하지는 않습니다.
Max Heiber

3

현재 창의 마지막 세그먼트를 얻으려면 :

window.location.href.substr(window.location.href.lastIndexOf('/') +1)


3

끝에 /가 있으면 먼저 제거 한 다음 URL의 마지막 부분을 얻을 수 있습니다

let locationLastPart = window.location.pathname
if (locationLastPart.substring(locationLastPart.length-1) == "/") {
  locationLastPart = locationLastPart.substring(0, locationLastPart.length-1);
}
locationLastPart = locationLastPart.substr(locationLastPart.lastIndexOf('/') + 1);

3

슬래시와 관계없이 마지막 세그먼트를 반환합니다.

var val = 'http://mywebsite/folder/file//'.split('/').filter(Boolean).pop();

console.log(val);


path.sep리터럴 슬래시 를 사용 하지 않는 것이 좋습니다. nodejs.org/api/path.html#path_path_sep를 참조하십시오 . 이렇게하면 OS에서 코드를 이식 가능하게 유지할 수 있습니다.
아론

1
좋은 생각이지만 더 이상 브라우저에서 작동하지 않습니다
John Doherty

좋은 지적. 나는 이것이 커맨드 라인 스크립트 / 서버 측 nodejs에서 선호된다고 말해야합니다.
아론


1

raddevus 답변 업데이트 :

var loc = window.location.href;
loc = loc.lastIndexOf('/') == loc.length - 1 ? loc.substr(0, loc.length - 1) : loc.substr(0, loc.length + 1);
var targetValue = loc.substr(loc.lastIndexOf('/') + 1);

url의 마지막 경로를 문자열로 인쇄합니다.

test.com/path-name = path-name

test.com/path-name/ = path-name

0

하위 문자열을 수행하기 전에 꼬리 슬래시 ( '/')를 제거하는 것이 더 안전하다고 생각합니다. 시나리오에 빈 문자열이 있기 때문입니다.

window.alert((window.location.pathname).replace(/\/$/, "").substr((window.location.pathname.replace(/\/$/, "")).lastIndexOf('/') + 1));

0

정규식과 분할을 사용하고 있습니다.

var last_path = location.href.match (/. / (. [\ w]) /) [1] .split ( "#") [0] .split ( "?") [0]

결국 그것은 #?를 무시할 것이다. & / 끝 URL, 많은 일이 발생합니다. 예:

https://cardsrealm.com/profile/cardsRealm- > 카드를 반환합니다

https://cardsrealm.com/profile/cardsRealm#hello- > 카드를 반환합니다

https://cardsrealm.com/profile/cardsRealm?hello- > 카드를 반환합니다

https://cardsrealm.com/profile/cardsRealm/- > 카드를 반환합니다


0

정규식이 코드의 효율성에 실제로 영향을 줄 수 있기 때문에이 문제를 해결하는 올바른 방법인지는 모르겠지만 아래 정규식은 마지막 세그먼트를 가져 오는 데 도움이되며 URL이 있어도 마지막 세그먼트를 제공합니다 뒤에 빈 /. 내가 생각 해낸 정규식은 다음과 같습니다.

[^\/]+[\/]?$

0
// https://x.com/boo/?q=foo&s=bar = boo
// https://x.com/boo?q=foo&s=bar = boo
// https://x.com/boo/ = boo
// https://x.com/boo = boo

const segment = new 
URL(window.location.href).pathname.split('/').filter(Boolean).pop();
console.log(segment);

나를 위해 작동합니다.


0

나는 그것이 오래되었다는 것을 알고 있지만 URL에서 이것을 얻으려면 간단히 사용할 수 있습니다.

document.location.pathname.substring(document.location.pathname.lastIndexOf('/.') + 1);

document.location.pathname현재 URL에서 경로 이름을 가져옵니다. lastIndexOf다음 정규 표현식의 마지막 항목 색인을 가져옵니다 /.. 점은 문자를 의미하므로 /URL의 마지막 문자 인지 계산하지 않습니다 . substring두 인덱스 사이의 문자열을 잘라냅니다.


0

URL이 http://localhost/madukaonline/shop.php?shop=79

console.log(location.search); 가져올 것이다 ?shop=79

가장 간단한 방법은 location.search 를 사용하는 것입니다.

여기여기 에 더 많은 정보를 찾을 수 있습니다


0

간단한 경로 (w / 0) 쿼리 문자열 등 으로이 작업을 수행 할 수 있습니다.

지나치게 복잡하고 성능이 좋지는 않지만 reduce그 재미를 위해 사용 하고 싶었 습니다.

  "/foo/bar/"
    .split(path.sep)
    .filter(x => x !== "")
    .reduce((_, part, i, arr) => {
      if (i == arr.length - 1) return part;
    }, "");
  1. 문자열을 경로 구분 기호로 분할하십시오.
  2. 빈 문자열 경로 부분을 필터링하십시오 (경로에서 슬래시가 발생할 수 있음).
  3. 경로 부분의 배열을 마지막 부분으로 줄입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.