Вы не можете сделать это за 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): ....