2012-02-12 58 views
0

我想我會重寫這個並添加一些背景的(更何況它會更容易向我解釋)。JavaScript的正則表達式驗證一個變量,然後捕獲變量

Basicaly我捕捉前進/後退按鈕與popstate事件,像這樣:

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


    curstate = window.location.href ; 

然後使用switch語句來確定基於新的狀態什麼:

 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/(capture開始URI的該位):然後把所拍攝b它在一個變量例如currentpage = capturedbitofuri

+0

'/^mydomain\.com\/portfolio \ /(。*)$ /'在它之後被捕獲。流行音樂是什麼意思? – 2012-02-12 21:15:54

+0

不像在'array_pop'中,他只是意味着「把它放在一個變量中」 – Joe 2012-02-12 21:17:53

回答

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

喜多爾,我有以下設置像這樣'curstate = window.location.href; \t \t \t \t var match = /^mydomain\.com\/portfolio\/(((*))/.exec(curstate); \t \t控制檯。日誌(匹配); (。*) \t \t如果(匹配){// 匹配[1]包含的組,這是前綴 的console.log後一切(匹配[1]); }; '但我得到的只是一場無效比賽。 – 2012-02-13 08:50:07

+0

我已經更新了問題並給了它一個上下文。 – 2012-02-13 08:59:13

0

相當簡單:/^mydomain\.com\/portfolio\/(.*)/

/字符必須進行轉義,因爲我們使用/作爲分隔符的圖案。

^在模式的開始表示字符串必須以「MYDOMAIN ......」。

最後,.*意味着「任何事情」,圍繞它的()意味着「在比賽中捕獲」。

至於使用它,有超過regex in JS 101讀,它會給你一個很好的介紹,正則表達式:)

+0

並捕獲它後面的內容? – 2012-02-12 21:16:16

+0

@FrankAstin這是'(。*)'。 – 2012-02-12 21:16:32

+0

剛剛更新了完整的解釋:) – Joe 2012-02-12 21:16:59

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

我到那裏的時候略有不同,但是這看起來像一個整潔的選項。謝謝德文。 – 2012-02-13 19:48:49

+0

是的,我喜歡你不需要用你的大腦(或其他任何與你的代碼一起工作)來計算正則表達式。 – 2012-02-13 23:39:58