2012-09-06 2 views
1

나는 "javascript/people/things /"에서이 URL을 가지고 있습니다. "things"만 반환하는 함수를 원합니다. 어떻게해야합니까?장고에있는 URL에서 자바 스크립트 문자열을 구문 분석하는 방법

나는 못 생겼습니다. iterating처럼하지만 나는 문자열의 나머지 부분을 삭제하는 방법과 그 매우 느린 asymptotically 알아 내야 할 때 붙어.

"ILLEGAL"이 계속 나타납니다. 슈퍼 짜증나. 모든

$(function() { 

    var parse = function(str) { 

     var a = ""; 
     if (str.length && str.length > 1) { 

      str = str.slice(0, str.length -1); //remove first 

      for (var i = str.length; i > 1; i--) { 
       if (str[i] !== '\\') { 
         a += str[i]; 
        } 

      } 


     } 

     return a; 

    }; 

     c = "\things\stuff\"; 
     alert(parse(c));  //result should be "things"     

});​ 

답변

1

첫째, 당신은 대신 match()를 사용하여 코드를 단순화 할 수 있습니다 : 당신이 탈출 당신의 문자열의 \에 잊었 때문에 ILLEGAL 오류와 관련하여

var s = "/people/things/"; 
var match = s.match(/\/([^/]+)\/$/); 
var things = match[1]; // "things" 

, 즉이다. 따라서 \things\stuff\ 대신 \\things\\stuff\\을 사용하십시오.

이제 parse 기능을 사용하십시오. 일반적인 생각은 올바르지 만 구현 오류의 몇 가지 있습니다 : 바로 당신이 \\ (당신의 ifelse 부분)을 발견하면 루프 밖으로

  1. break을; 그렇지 않으면 \을 건너 뛰고 을 모두 추가 다른 문자를 추가하면됩니다.
  2. 배열을 처음부터 끝까지 탐색하고 각 문자를 문자열에 추가합니다. 따라서 결국 이 반대로 문자열로 바뀝니다. 이 문제를 해결하려면 a += str[i] 대신 a = str[i] + a을 사용하십시오.
  3. ia.length - 1이 아니라 a.length으로 시작해야합니다.

    var parse = function(str) { 
        var a = ''; 
        if (str.length && str.length > 1) { 
        str = str.slice(0, str.length -1); 
        for (var i = str.length - 1; i > 1; i--) { 
         if (str[i] !== '\\') { 
         a = str[i] + a; 
         } else { 
         break; 
         } 
        } 
        } 
        return a; 
    }; 
    

    DEMO :

여기에 최종 버전입니다.

+0

어쩌면 언젠가는 정규 표현식 –

+0

을 배울 것입니다. @Dave : 기본적으로'/'와 일치하고'/'와 같지 않은 또 하나의 문자,'[^ /] +', 마지막의'/'와 일치합니다. –

관련 문제