Vous ne pouvez pas le faire dans un switch
sauf si vous faites complet correspondance de chaîne; c'est faire en sous-chaîne correspondant. (Ce n'est pas tout à fait vrai, comme Sean points dans les commentaires. Voir la note à la fin.)
Si vous êtes satisfait de votre regex en haut est le dépouiller de tout ce que vous ne voulez pas de comparer à votre match, vous n'avez pas besoin d'une correspondance de sous-chaîne, et pourrait faire:
switch (base_url_string) {
case "xxx.local":
// Blah
break;
case "xxx.dev.yyy.com":
// Blah
break;
}
...mais encore une fois, cela ne fonctionne que si le complet de la chaîne que vous êtes correspondant. Il ne pourrait pas s' base_url_string
ont été, disons, "yyy.xxx.locaux", alors que votre code correspond à celui de la "xxx.locaux" de la branche.
Mise à jour: Ok, donc techniquement, vous pouvez utiliser un switch
pour la sous-chaîne correspondant, mais je ne le recommande pas, dans la plupart des situations. Voici comment (live exemple):
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;
}
}
Qui fonctionne en raison de la façon JavaScript switch
des énoncés des travaux, en particulier deux aspects essentiels: d'Abord, que les cas sont à considérer dans le texte de la source de l'ordre, et, deuxièmement, que le sélecteur d'expressions (les bits après le mot-clé case
) sont des expressions qui sont évaluées comme ce cas est évalué (pas constantes comme dans quelques autres langues). Depuis notre test d'expression est - true
, la première case
expression des résultats en true
sera celle qui est utilisée.