[解決済み】JavaScriptの文字列マッチングのためのSwitch文
質問
以下の条件に対するswitchはどのように書けばよいのでしょうか?
もし、urlが
を含む
"foo"の場合、以下のようになります。
settings.base_url
は"bar"です。
以下は必要な効果を実現していますが、これならスイッチの方が扱いやすい気がしてきました。
var doc_location = document.location.href;
var url_strip = new RegExp("http:\/\/.*\/");
var base_url = url_strip.exec(doc_location)
var base_url_string = base_url[0];
//BASE URL CASES
// LOCAL
if (base_url_string.indexOf('xxx.local') > -1) {
settings = {
"base_url" : "http://xxx.local/"
};
}
// DEV
if (base_url_string.indexOf('xxx.dev.yyy.com') > -1) {
settings = {
"base_url" : "http://xxx.dev.yyy.com/xxx/"
};
}
解決方法は?
にはできません。
switch
をしているのでなければ
フル
文字列のマッチング。
部分文字列
マッチングを行います。
(これは
かなり
コメントでSeanが指摘しているように、本当です。末尾の注を参照)
もし、一番上の正規表現がマッチの中で比較したくないものをすべて取り除いていることに満足しているなら、部分文字列マッチは必要なく、できるはずです。
switch (base_url_string) {
case "xxx.local":
// Blah
break;
case "xxx.dev.yyy.com":
// Blah
break;
}
...しかし、これもまた、それが
完全
という文字列をマッチングさせます。次のような場合は失敗します。
base_url_string
が、例えば "yyy.xxx.local" であれば、現在のコードでは "xxx.local" ブランチでマッチングされます。
更新情報
: さて、では技術的にあなたは
できる
を使用します。
switch
を使えば部分文字列のマッチングができますが、ほとんどの場合、これはお勧めできません。以下はその方法です (
ライブ例
):
function test(str) {
switch (true) {
case /xyz/.test(str):
display("• Matched 'xyz' test");
break;
case /test/.test(str):
display("• Matched 'test' test");
break;
case /ing/.test(str):
display("• Matched 'ing' test");
break;
default:
display("• Didn't match any test");
break;
}
}
それがうまくいくのは、JavaScriptの
switch
ステートメントが動作します。
特に、2つの重要な点があります。第一に、ケースは
ソーステキスト
の順番に並べること、そして、セレクタ式(キーワード
case
) は
式
は、そのケースが評価されるときに評価されます(他のいくつかの言語のように定数ではありません)。ですから、私たちのテスト式は
true
の場合、最初の
case
になる式は
true
が使われます。
関連
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 Uncaught TypeError: data.push is not a function
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】TypeError: 'undefined'はオブジェクトではありません。
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み】別のjsファイル内でJavaScriptの関数を呼び出す
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。