Anda tidak dapat melakukannya di switch
kecuali Anda melakukan pencocokan string penuh ; itu melakukan pencocokan substring . (Ini tidak cukup benar, seperti yang ditunjukkan Sean dalam komentar. Lihat catatan di bagian akhir.)
Jika Anda senang bahwa regex Anda di atas menghilangkan semua yang tidak ingin Anda bandingkan dalam pertandingan Anda, Anda tidak perlu pertandingan substring, dan dapat melakukan:
switch (base_url_string) {
case "xxx.local":
// Blah
break;
case "xxx.dev.yyy.com":
// Blah
break;
}
... tapi sekali lagi, itu hanya berfungsi jika itu adalah string lengkap yang cocok dengan Anda. Itu akan gagal jika base_url_string
, katakanlah, "yyy.xxx.local" sedangkan kode Anda saat ini akan cocok dengan yang ada di cabang "xxx.local".
Pembaruan : Oke, jadi secara teknis Anda dapat menggunakan switch
pencocokan substring, tetapi saya tidak akan merekomendasikannya di sebagian besar situasi. Begini caranya ( contoh langsung ):
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;
}
}
Itu berfungsi karena cara switch
kerja pernyataan JavaScript , khususnya dua aspek utama: Pertama, bahwa kasus dipertimbangkan dalam urutan teks sumber , dan kedua bahwa ekspresi pemilih (bit setelah kata kunci case
) adalah ekspresi yang dievaluasi sebagaimana halnya case dievaluasi (bukan konstanta seperti dalam beberapa bahasa lain). Jadi karena ekspresi pengujian kami adalah true
, case
ekspresi pertama yang menghasilkan true
akan menjadi yang digunakan.
switch(true) { case /foo/.test(bar): ....