2012-02-12 9 views
0

私はこれを書き直して少しの文脈を追加すると思っていました(もっと説明すると分かりやすくなります)。javascript regex変数を検証してその変数を取り込みます

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/(uriのこのビットをキャプチャします):キャプチャしたbを入れますそれは例えば変数currentpage = capturedbitofuriにあります。

+0

'/^mydomain\co.jp/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

こんにちはドール....しかしヌルを返し、私は次のように' 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]); };しかし、私が得るのは、マッチからのヌルです。 –

+0

私は質問を更新し、それに文脈の二重を与えました。 –

0

かなり簡単:我々は、パターンの区切り文字として/を使用しているよう/^mydomain\.com\/portfolio\/(.*)/

/文字は、エスケープする必要があります。

^は、パターンの先頭に文字列が "mydomain ..."で始まる必要があることを示します。

最後に、.*は「何か」を意味し、()は「一致するものをキャプチャする」ことを意味します。それを使用するためとして、

は、regex in JS 101以上の読み取りを持っている、それはあなたも、正規表現を必要としない

+0

そしてその後ろにあるものをキャプチャしていますか? –

+0

@FrankAstinそれは '(。*)'です。 –

+0

完全な説明で更新しました:) – Joe

0

:)あなたregexでする良い導入を与えるでしょう。あなたの頭を包み込むために必要なのは、.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

私は少し違ってきましたが、これはちょっとした選択肢のようです。ありがとうDevin。 –

+0

ええ私は、あなたの脳(またはあなたのコードを扱っている他の人)が正規表現を見つけ出す必要がないのが好きです。 –

関連する問題