Non si può fare in un switch
a meno che non si sta facendo pieno corrispondenza delle stringhe; ciò corrisponde alla corrispondenza della sottostringa .(Questo non è del tuttovero, come sottolinea Sean nei commenti. Vedere nota alla fine.)
Se sei felice che il vostro regex in alto è spogliando via tutto ciò che don 't vuole confrontare in partita, non hanno bisogno di una corrispondenza sottostringa, e potrebbe fare:
switch (base_url_string) {
case "xxx.local":
// Blah
break;
case "xxx.dev.yyy.com":
// Blah
break;
}
... ma ancora una volta, che solo funziona se è la stringa completa si sta corrispondenti. Fallirebbe se base_url_string
fosse, ad esempio, "yyy.xxx.local" mentre il codice corrente corrisponderebbe a quello nel ramo "xxx.local".
Aggiornamento: Okay, tecnicamente si può utilizzare un switch
per la corrispondenza sottostringa, ma io non lo consiglio in molte situazioni. Ecco come (live example):
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;
}
}
che funziona a causa del modo JavaScript switch
statements work, in particolare due aspetti fondamentali: in primo luogo, che i casi sono considerati in fonte di testo ordine, e in secondo luogo che le espressioni di selezione (la i bit dopo la parola chiave case
) sono espressioni che vengono valutate in base alla valutazione del caso (non alle costanti come in alcune altre lingue). Pertanto, poiché la nostra espressione di test è true
, la prima espressione case
che risulta in true
sarà quella che verrà utilizzata.
fonte
2010-05-24 11:35:23
So che è vecchio, ma questo non è del tutto vero - si può effettivamente fare 'switch (true) {case /foo/.test(bar): ....' –
@Sean: Ugh. Sì, hai perfettamente ragione (ad esempio: [esempio] (http://jsbin.com/ehabar)), ma non andare lì ... ;-) –
@TJCrowder perché non consigli di usare una regex nella maggior parte delle situazioni? –