Sie können dies nur dann tun, switch
wenn Sie einen vollständigen String-Abgleich durchführen. das macht Teilstring- Matching. (Dies ist nicht ganz richtig, wie Sean in den Kommentaren betont. Siehe Anmerkung am Ende.)
Wenn Sie froh sind, dass Ihre Regex an der Spitze alles entfernt, was Sie in Ihrem Match nicht vergleichen möchten, benötigen Sie kein Teilstring-Match und können Folgendes tun:
switch (base_url_string) {
case "xxx.local":
// Blah
break;
case "xxx.dev.yyy.com":
// Blah
break;
}
... aber auch das funktioniert nur, wenn dies die vollständige Zeichenfolge ist, mit der Sie übereinstimmen. Es würde fehlschlagen, wenn beispielsweise base_url_string
"yyy.xxx.local" wäre, während Ihr aktueller Code mit dem im Zweig "xxx.local" übereinstimmen würde.
Update : Okay, so technisch Sie können eine Verwendung switch
für Teilzeichenanpassung, aber ich würde es nicht in den meisten Fällen empfehlen. So geht's ( Live-Beispiel ):
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;
}
}
Dies funktioniert aufgrund der Funktionsweise von JavaScript- switch
Anweisungen , insbesondere zweier wichtiger Aspekte: Erstens, dass die Fälle in der Reihenfolge des Quelltextes berücksichtigt werden, und zweitens, dass die Selektorausdrücke (die Bits nach dem Schlüsselwort case
) Ausdrücke sind, die als dieser Fall ausgewertet werden ausgewertet (keine Konstanten wie in einigen anderen Sprachen). Da unser Testausdruck lautet true
, wird als erster case
Ausdruck derjenige true
verwendet, der verwendet wird.
switch(true) { case /foo/.test(bar): ....
true
dort haben, sondern alles zusammen weglassen.RegExp kann nicht nur technisch, sondern auch praktisch mit der
match
Methode für die Eingabezeichenfolge verwendet werden.Da die Ausgabe von
match()
ein Array ist, müssen wir das erste Array-Element des Ergebnisses abrufen. Wenn die Übereinstimmung fehlschlägt, kehrt die Funktion zurücknull
. Um einen Ausnahmefehler zu vermeiden, fügen wir den||
bedingten Operator hinzu, bevor wir auf das erste Array-Element zugreifen, und testen dieinput
Eigenschaft , die eine statische Eigenschaft regulärer Ausdrücke ist , die die Eingabezeichenfolge enthält.Ein anderer Ansatz besteht darin, den
String()
Konstruktor zu verwenden, um das resultierende Array zu konvertieren, das nur 1 Element (keine Erfassungsgruppen) enthalten darf, und die gesamte Zeichenfolge muss mit quanitifiers (.*
) in eine Zeichenfolge erfasst werden . Im Falle eines Fehlers wird dasnull
Objekt zu einer"null"
Zeichenfolge. Nicht bequem.Eine elegantere Lösung ist die Verwendung des
/^find-this-in/.test(str)
with-switch (true)
Methode, die einfach einen booleschen Wert zurückgibt und die Suche ohne Groß- und Kleinschreibung einfacher macht.quelle
Verwenden Sie einfach die Eigenschaft location.host
quelle
switch ("" + location.host)
.Eine andere Option ist die Verwendung des
input
Felds eines Regexp-Übereinstimmungsergebnisses :quelle
.length:
-> Wenn die Übereinstimmung hergestellt ist, gibt der ternäre Ausdruck das ursprüngliche Token zurück
----> Das ursprüngliche Token wird nach Groß- und Kleinschreibung ausgewertet
-> Wenn die Übereinstimmung nicht hergestellt wird, gibt der Ternär undefiniert zurück
----> Case bewertet das Token gegen undefiniert, was Ihr Token hoffentlich nicht ist.
Der ternäre Test kann zum Beispiel in Ihrem Fall alles sein
===========================================
ist ein ternärer Ausdruck.
Der Test in diesem Fall ist token.match (/ spo /), der die Übereinstimmung der im Token enthaltenen Zeichenfolge mit dem regulären Ausdruck / spo / angibt (in diesem Fall die wörtliche Zeichenfolge spo).
Wenn der Ausdruck und die Zeichenfolge übereinstimmen, ergibt sich true und es wird ein Token zurückgegeben (dies ist die Zeichenfolge, mit der die switch-Anweisung arbeitet).
Offensichtlich Token === Token, damit die switch-Anweisung übereinstimmt und der Fall ausgewertet wird
Es ist einfacher zu verstehen, wenn Sie es in Schichten betrachten und verstehen, dass der Drehtest "VOR" der switch-Anweisung ausgewertet wird, sodass die switch-Anweisung nur die Testergebnisse sieht.
quelle
token.match(/spo/)
das passen würde.Es kann einfacher sein. Versuchen Sie so zu denken:
::
quelle
TypeError: url.match(...) is null
Könnte zu spät sein und alles, aber ich mochte dies für den Fall Aufgabe :)
Sie könnten noch weiter gehen und eine Liste mit Optionen übergeben und den regulären Ausdruck mit | behandeln
quelle
|| {}
zu|| [-1]
oder ähnlich wechseln . Warum wirdnew RegExp
nicht nur Schrägstriche verwendet?