人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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);
}
}

●質問者: pocon
●カテゴリ:インターネット ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● liml
●100ポイント

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

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

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

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

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


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

2 ● Cherenkov
●110ポイント ベストアンサー

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);
 }
}

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

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ