2012-05-26 4 views
42

문자가 마지막으로 발생하기 전에 모든 것을 제거 :내가 문자열에서 다음 작업을 수행하기 위해 노력하고있어

  • 캐릭터 "/"의 마지막 항목을 찾으를;
  • 해당 문자 앞의 모든 것을 제거하십시오.
  • 문자열의 나머지 부분을 반환합니다.

    var string = "/Roland/index.php"; // Which is a result of window.location.pathname 
    
    지금 그것을 밖으로 추출하는 데 필요한

    실제 페이지를 제외한 모든이 같은 것입니다 :

    var result = "index.php" // Which is what I need to be returned 
    

더 명시하기 위해, 나는 다음과 같은 문자열이 있다고 가정 해 보자

당연히, 그것은 단지 예제 일뿐입니다. 분명히 다른 페이지를 가지기 때문에, 같은 원칙이 적용됩니다.

누군가가 해결책을 찾도록 도와 줄 수 있는지 궁금합니다. 나는 다음 작업을 시도하지만 성공 :

var location = window.location.pathname; 
var result = location.substring(location.lastIndexOf["/"]); 
+1

가까이에 있습니다. 'lastIndexOf'는 함수이며 전역 변수라면'location'을 오버라이드 할 수 없습니다. 그래서 그것은 다음과 같아야합니다 :'loc.substring (loc.lastIndexOf ("/"))'그리고 당신이 슬래시 자체를 포함하고 싶지 않기 때문에'loc.substring (loc.lastIndexOf ("/") + 1)' . –

답변

67

올바른 방법으로 괄호를 대괄호로 바꿀 수 있습니다. 여기

var string = "/Roland/index.php"; 
var result = string.substring(string.lastIndexOf("/") + 1); 

jsfiddle는 한 예이며, 여기에서 Mozilla Developer Network .lastIndexOf() 메소드에 대한 설명이다.

+0

... 잘못된 괄호. : p – Amadan

+0

오, 나는 눈치 채지 못했습니다 :) – Roland

+6

그게 마지막 일 후에 * 모든 것을 제거합니다. OP는 모든 것을 * 이전에 제거하려고합니다. 실제로'location.substring (location.lastIndexOf ("/") + 1)'이어야합니다. –

6

분할 마지막 요소 오프 /.pop()에 배열로 문자열. 후행 슬래시가있는 경우 먼저 슬래시를 제거해야합니다.

var locationstring = window.location.pathname; 
// replace() the trailing/with nothing, split on the remaining /, and pop off the last one 
console.log(locationstring.replace(/\/$/, "").split('/').pop()); 

경우가 here보다는 빈 문자열을 반환해야하는 경우는, / 후행 한 /path/stuff/here/ 같은 URL의 경우, 호출 체인에서 .replace()을 제거하기 위해 위를 수정하는 경우

. 마지막 슬래시에 관계없이 마지막 구성 요소를 원하지만 잘못 가정했을 수 있습니다.

console.log(locationstring.split('/').pop()); 
+0

제 솔루션이 더 깨끗하다고 ​​생각합니다. 그러나 어떤 경우에는 "/"또는 "/"없이 배열을 다시 결합해야합니다. –

+0

나는'.pop()'를 사용하지 않는 편을 선호한다. :) – Roland

+0

@Dr. Dredel OP는 문자열의 나머지 부분은 필요 없으므로 마지막 부분 만 다시 결합 할 필요가 없습니다 –

8

는 개인적으로 나는 정규 표현식 사용하십시오 : 같은 외국인 보이는대로 때 당신이 정규 표현식에 익숙하다면

var result = string.replace(/^.*\/(.*)$/, "$1"); 

을 (그리고 :-) 다음, 그렇지 않은 경우는해야한다 그들이 생소하다.

선도자 인 ^은이 정규식이 문자열 시작 부분에 일치 항목을 "고정"하도록합니다. \// 문자와 일치합니다 (\/이 정규식 파서를 혼동하지 않게합니다). 그런 다음 (.*)$/부터 그 문자열의 끝까지를 모두 일치시킵니다. 처음 .*은 가능한 한 많이 위로 삼키고 마지막 문자 앞에 /자를 포함합니다. 대체 텍스트 "$1"은 "첫 번째로 일치하는 그룹의 내용"을 의미하는 특수한 형식입니다.이 정규식은 .* ((.*)$)에 괄호로 묶인 그룹을 가지고 있습니다. 마지막으로 / 이후의 모든 내용이 될 것이므로 전반적인 결과는 전체 문자열이 바로 그 것으로 대체된다는 것입니다. (모든 / 문자가 없기 때문에 패턴이 일치하지 않는 경우는 아무것도 일어나지 않습니다.)

+0

아니요, 익숙합니다. PHP에서는 사용하지만 JS에서는 적습니다. – Roland

2
var result = /\/([^\/]*)$/.exec(location)[1]; 

//"remove-everything-before-the-last-occurrence-of-a-character#10767835" 

참고 : 여기 locationwindow.location, 아닌 var location입니다.

0
var string = "/Roland/index.php"; 
var result = string.substring(0, string.lastIndexOf("/") + 0); 
관련 문제