Anahtar JavaScript dize eşleşen ifade
Nasıl aşağıdaki koşullu bir swtich yazacağım?
Urliçerir"", sonra Ayarlar.foo base_url"". bar
Aşağıdaki efekti elde edilir ama gerekli bir geçiş bu daha yönetilebilir olacağını hissediyorum:
var doc_location = document.location.href;
var url_strip = new RegExp("http:\/\/.*\/");
var base_url = url_strip.exec(doc_location)
var base_url_string = base_url[0];
//BASE URL CASES
// LOCAL
if (base_url_string.indexOf('xxx.local') > -1) {
settings = {
"base_url" : "http://xxx.local/"
};
}
// DEV
if (base_url_string.indexOf('xxx.dev.yyy.com') > -1) {
settings = {
"base_url" : "http://xxx.dev.yyy.com/xxx/"
};
}
CEVAP
Yapmadıktan (Bu değiloldukçaSean yorumlarda belirttiği gibi doğru. Sonundaki nota bakın.)switch
bunu yapamazsıntamdize eşleşen; o işi yapıyoralteşleşen.
Eğer üzerine düzenli maç içinde karşılaştırmak için istemediğiniz her şey ayrılmasından mutlu iseniz, bir alt dize eşleştirme gerekmez, ve yapabileceği:
switch (base_url_string) {
case "xxx.local":
// Blah
break;
case "xxx.dev.yyy.com":
// Blah
break;
}
...ama yine, bu sadece bu çalışıyortamamlayındize eşleştirme. Eğer base_url_string
, "yyy.olsaydı başarısız olurdu xxx.yerel" geçerli kodu olan maç için ise "xxx.yerel" şube.
GüncellemeTamam, yani teknik olarakolabiliralt dize eşleştirme için switch
kullanın, ancak çoğu durumda tavsiye etmem. (live example) burada:
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;
}
}
Özellikle switch
statements work iki önemli yönleri JavaScript yolu nedeniyle çalışır: davaları kabul eden İlk,kaynak metinsipariş ve seçici ifadeler (anahtar sonra bit case
) bu ikinciifadelerbu davayı değerlendirilir (değil sabit olarak başka bir dilde) değerlendirilir. Bu yüzden test ifadesi beri true
, true
sonuçları alışır bu tek olacak case
ilk ifade.
Nasıl JavaScript düzenli ifade eşleşen...
Düzenli ifade deseni her yerde dize eş...
Nasıl JavaScript bir dize gelen tüm no...
Parantez arasında bir dize almak için ...
İki dize arasında bir dize almak için ...