Você não pode fazer isso a switch
menos que esteja fazendo uma correspondência completa de cadeias; que está fazendo correspondência de substring . (Isso não é bem verdade, como Sean aponta nos comentários. Veja a nota no final.)
Se você está feliz que a sua expressão regular no topo está removendo tudo o que você não deseja comparar na sua correspondência, não precisa de uma correspondência de substring e pode fazer:
switch (base_url_string) {
case "xxx.local":
// Blah
break;
case "xxx.dev.yyy.com":
// Blah
break;
}
... mas, novamente, isso só funciona se for a string completa que você está combinando. Ele falharia se base_url_string
fosse, digamos, "aaa.xxx.local", enquanto o seu código atual corresponderia ao da ramificação "xxx.local".
Atualização : Ok, então tecnicamente você pode usar um switch
para correspondência de substring, mas eu não o recomendaria na maioria das situações. Veja como ( exemplo ao vivo ):
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;
}
}
Isso funciona devido à maneira como as switch
instruções JavaScript funcionam , em particular dois aspectos principais: primeiro, que os casos são considerados na ordem do texto de origem e, segundo, que as expressões do seletor (os bits após a palavra-chave case
) são expressões avaliadas conforme o caso. avaliados (não constantes como em alguns outros idiomas). Portanto, como nossa expressão de teste é true
, a primeira case
expressão que resultar true
será a que for usada.
switch(true) { case /foo/.test(bar): ....
true
lá, você simplesmente deixa de fora todos juntos.O RegExp pode ser usado na cadeia de entrada não apenas tecnicamente, mas também praticamente com o
match
método.Como a saída de
match()
é uma matriz, precisamos recuperar o primeiro elemento da matriz do resultado. Quando a correspondência falha, a função retornanull
. Para evitar um erro de exceção, adicionaremos o||
operador condicional antes de acessar o primeiro elemento da matriz e testaremos ainput
propriedade que é uma propriedade estática das expressões regulares que contém a sequência de entrada.Outra abordagem é usar o
String()
construtor para converter a matriz resultante que deve ter apenas 1 elemento (sem grupos de captura) e a cadeia inteira deve ser capturada com quanitifiers (.*
) em uma cadeia. Em caso de falha, onull
objeto se tornará uma"null"
string. Não é conveniente.De qualquer forma, uma solução mais elegante é usar o método
/^find-this-in/.test(str)
withswitch (true)
, que simplesmente retorna um valor booleano e é mais fácil pesquisar sem distinção entre maiúsculas e minúsculas.fonte
Basta usar a propriedade location.host
fonte
switch ("" + location.host)
.Outra opção é usar o
input
campo de um resultado de correspondência regexp :fonte
.length:
-> Se a correspondência é feita, a expressão ternária retorna o token original
----> O token original é avaliado por maiúsculas e minúsculas
-> Se a correspondência não for feita, os retornos ternários são indefinidos
----> Case avalia o token em relação ao indefinido, que esperamos que seu token não seja.
O teste ternário pode ser qualquer coisa, por exemplo, no seu caso
===========================================
é uma expressão ternária.
O teste nesse caso é token.match (/ spo /), que indica a correspondência da string mantida no token com a expressão de expressão regular / spo / (que é a literal literal spo nesse caso).
Se a expressão e a string corresponderem, resultará em true e retornará o token (que é a string na qual a instrução switch está operando).
Obviamente token === token para que a instrução switch seja correspondida e o caso avaliado
É mais fácil entender se você o observar em camadas e entender que o teste de torneamento é avaliado "ANTES" da instrução switch, para que a instrução switch veja apenas os resultados do teste.
fonte
token.match(/spo/)
isso corresponderia.Pode ser mais fácil. Tente pensar assim:
:
fonte
TypeError: url.match(...) is null
Pode ser tarde demais e tudo, mas eu gostei disso na atribuição de caso :)
você pode levar isso adiante e passar uma lista de opções e manipular o regex com |
fonte
|| {}
para|| [-1]
ou similar para segurança de tipo. Além disso, por que énew RegExp
usado, não apenas barras?