javascriptのRegExpで取得した値からのswitch文の書き方を教えてください。


URLによって挙動を変えるswitch文を書きたく以下のコードで実行するのですが
http://example.com/abc100にアクセスしても、Defaultの結果「100」にしかなりません。

上述URLで「a」がアラート表示して欲しいのですが、こちらはどのように書いたらよいでしょうか?


if(location.href.match(new RegExp(/abc(\d{3}$)/))){

switch (RegExp.$1){

case 100:
window.alert("a");
break;
case 101:
window.alert("b");
break;
case 012:
window.alert("c");
break;
default:
window.alert(RegExp.$1);
}
}

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/03/21 09:46:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Cherenkov No.2

回答回数1504ベストアンサー獲得回数493

ポイント110pt

caseの箇所(数値だけなら回答1)と正規表現を修正。
location.hrefはリクエストURLによって最後にスラッシュが付くこともあるので注意。(abc100/ではなく確実にabc100を開くなら関係ないか。自分がハマったのはロケーションバーでco.jpと表示されているのに、location.hrefはco.jp/ だった。)
new RegExp()は文字列から正規表現オブジェクトを作る際に使いますが今回は必要ないと思います。

if (location.href.match(/abc(\d{3})\/?$/)) {
    switch (RegExp.$1) {
    case '100':
        window.alert("a");
        break;
    case '101':
        window.alert("b");
        break;
    case '012':
        window.alert("c");
        break;
    default:
        window.alert(RegExp.$1);
    }
}
id:pocon

ご回答ありがとうございます。
RegExp.$1はnew RegExp()じゃないといけないものだと思い込んでいました。
大変勉強になりました。、location.hrefの注意点もありがとうございます。(_ _)

2012/03/21 10:28:21

その他の回答1件)

id:liml No.1

回答回数8ベストアンサー獲得回数3

ポイント100pt

以下、IE9での動作確認になります。

以下の変更をすると「a」と表示されました。
 前:switch (RegExp.$1){
 後:switch ( parseInt(RegExp.$1) ){

解説をすると、RegExp.$1は文字型を返すようです。
switch文では等価演算子「===」により値と型が同じかを評価します。
つまり、一つ目のcase文では「100==="100"」という評価が行われ、
型が異なるためFalseとなります。
switch文 - 条件分岐 - JavaScript入門

文字列型から数値へ変換する関数「parseInt」により、
両者の型を合わせてあげるとうまくいきます。
parseInt関数 - グローバル関数 - JavaScript入門

javascriptでは型をあまり意識しないので、引っかかりやすいですね。

id:pocon

ご回答ありがとうございます。
書いて頂いたコードに修正したところ希望通りに動いてくれました。

2012/03/21 09:43:29
id:Cherenkov No.2

回答回数1504ベストアンサー獲得回数493ここでベストアンサー

ポイント110pt

caseの箇所(数値だけなら回答1)と正規表現を修正。
location.hrefはリクエストURLによって最後にスラッシュが付くこともあるので注意。(abc100/ではなく確実にabc100を開くなら関係ないか。自分がハマったのはロケーションバーでco.jpと表示されているのに、location.hrefはco.jp/ だった。)
new RegExp()は文字列から正規表現オブジェクトを作る際に使いますが今回は必要ないと思います。

if (location.href.match(/abc(\d{3})\/?$/)) {
    switch (RegExp.$1) {
    case '100':
        window.alert("a");
        break;
    case '101':
        window.alert("b");
        break;
    case '012':
        window.alert("c");
        break;
    default:
        window.alert(RegExp.$1);
    }
}
id:pocon

ご回答ありがとうございます。
RegExp.$1はnew RegExp()じゃないといけないものだと思い込んでいました。
大変勉強になりました。、location.hrefの注意点もありがとうございます。(_ _)

2012/03/21 10:28:21

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません