2012-02-12 1 views
0

이 내용을 다시 작성하고 약간의 컨텍스트를 추가한다고 생각합니다 (더 자세히 설명하면 더 쉽게 설명 할 수 있습니다).javascript regex 변수를 확인한 다음 해당 변수를 캡처하십시오.

Basicaly는 그래서 같은 popstate 이벤트와 뒤로/앞으로 버튼을 캡처 해요 :

window.addEventListener("popstate", function(e) { 


    curstate = window.location.href ; 

그런 다음 새로운 상태에 따라 수행 할 작업을 결정하는 스위치 문을 사용하여 :

 switch (curstate) { 

     case 'http://mydomain.com/': 

      navi('about', 200); 
      break; 



     case 'http://mydomain.com/resume': 
      navi('resume', 200); 
      break; 
     }; 

    }); 

상태가 mydomain.com/portfolio/-whatever-

일 때 문제가 발생합니다. mydomain.com/portfolio/(Upi의이 비트 캡처)로 시작합니다. 캡처 한 b를 넣습니다. 변수 예 : currentpage = capturedbitofuri.

+0

'/^mydomain\.com\/portfolio\/portfolio\/ (. *) $ /'이후에 캡쳐됩니다. 팝이 무슨 소리 야? –

+0

'array_pop'에서와 마찬가지로, 그는 단지 "변수를 변수에 넣는다"는 의미입니다. – Joe

답변

1
// returns an array on success or null on failure 
var match = /^mydomain\.com\/portfolio\/(.*)/.exec(str); 
if (match) { 
    // match[1] contains the group (.*), which is everything after the prefix 
    return match[1]; 
} 
+0

안녕하세요. Dor, 다음과 같이 설정했습니다. 'curstate = window.location.href; \t \t \t \t var match = /^mydomain\com\/portfolio\/(.*)/.exec(curstate); \t \t 콘솔.로그 (일치); \t \t (일치) { // match [1]에 접두어 console.log (match [1]) 이후의 모든 항목 인 그룹 (. *)이 포함되어 있으면; }; '하지만 내가 얻는 것은 모두 일치에서 null입니다. –

+0

나는이 질문을 업데이트하고 두 가지 맥락을 제시했다. –

0

매우 간단는 우리가 패턴에 대한 구분 기호로 /를 사용으로

/ 문자 /^mydomain\.com\/portfolio\/(.*)/는 이스케이프해야합니다.

^은 패턴 시작 부분에 문자열이 "mydomain ..."으로 시작해야 함을 나타냅니다.

결국 .*은 "무엇이든"을 의미하고 ()은 "일치로 캡처하십시오"를 의미합니다. 그것을 사용에 관해서는

regex in JS 101 이상 읽기가, 그것은 당신에게 당신도 정규식이 필요하지 않습니다

+0

그리고 그 뒤에있는 것을 캡쳐합니까? –

+0

@FrankAstin 그건'(. *)'입니다. –

+0

방금 ​​전 설명과 함께 업데이트되었습니다. – Joe

0

:) 정규식 좋은 소개를 줄 것이다. 머리를 감싸기 위해서 필요한 것은 .indexOf와 .substring뿐입니다.

if (curstate === 'http://mydomain.com/') { 

    navi('about', 200); 

} else if (curstate === 'http://mydomain.com/resume') 

    navi('resume', 200); 

} else if (curstate.indexOf('http://mydomain.com/portfolio') > -1) { 
    var base = 'http://mydomain.com/portfolio'; 
    portfoliosection = curstate.substr(base.length + 1, curstate.length); 
} 
+0

나는 약간 다르게 거기에 도착했다. 그러나 이것은 더 근사한 선택처럼 보인다. 고마워 데빈. –

+0

예 저는 정규 표현식을 알아내는 데 뇌 (또는 코드로 작업하는 다른 사람)를 감출 필요가없는 것을 좋아합니다. –

관련 문제