Ви не можете це зробити, switch
якщо не виконаєте повне узгодження рядків; це робить відповідність підрядків . (Це не зовсім вірно, як в коментарях вказує Шон. Дивіться примітку в кінці.)
Якщо ви щасливі, що ваш регекс вгорі знімає все, що ви не хочете порівнювати у вашому матчі, вам не потрібна відповідна підрядка, і ви можете:
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;
}
}
Це працює через те, як switch
працюють оператори JavaScript , зокрема два ключові аспекти: По-перше, випадки розглядаються у порядку вихідного тексту , а по-друге, що вирази селектора (біти після ключового слова case
) є виразами , які оцінюються як такий випадок. оцінюється (не константи, як у деяких інших мовах). Отже, оскільки наш тестовий вираз є true
першим case
, true
до якого виходить, буде те, що звикає.
switch(true) { case /foo/.test(bar): ....