Ich versuche, eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung mit zwei Zeichenfolgen in JavaScript zu erhalten.
Normalerweise wäre es so:
var string="Stackoverflow is the BEST";
var result= string.search(/best/i);
alert(result);
Die /i
Flagge würde zwischen Groß- und Kleinschreibung unterscheiden.
Aber ich muss nach einer zweiten Zeichenfolge suchen. ohne Flagge funktioniert es perfekt:
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(searchstring);
alert(result);
Wenn ich das /i
Flag zum obigen Beispiel hinzufüge, wird nach Suchzeichenfolge gesucht und nicht nach dem, was in der Variablen "Suchzeichenfolge" enthalten ist (nächstes Beispiel funktioniert nicht):
var string="Stackoverflow is the BEST";
var searchstring="best";
var result= string.search(/searchstring/i);
alert(result);
Wie kann ich das erreichen?
quelle
string.match(/best/i);
.match
für den booleschen Vergleich verwenden. Es wird über das erste Ergebnis hinaus gesucht. Sie müssen nach dem ersten Spiel aufhören, was.test
oder.search
tun. Überprüfen Sie hier die Leistung .toLowerCase
wird höchstwahrscheinlich den Türkei-Test ( moserware.com/2008/02/does-your-code-pass-turkey-test.html ) und ähnliche Probleme bei der Fallkonvertierung nicht bestehen . Ich bin mir nicht sicher, wieReGex
ich damit umgehen soll, aber wenn ich raten müsste, würde ich es besser sagen.var text = "best"; var exp = new RegExp(test, "i");
. Dies ist das gleiche wie/best/i
.Ersetzen
mit
quelle
s = 'a[b'; r = new RegExp(s)
führt zu einem Syntaxfehler (nicht abgeschlossene Zeichenklasse)Wenn Sie nur nach einer Zeichenfolge suchen und nicht nach einem komplizierteren regulären Ausdruck, können Sie diese verwenden.
indexOf()
Denken Sie jedoch daran, beide Zeichenfolgen zuerst in Kleinbuchstaben zu schreiben, da zwischenindexOf()
Groß- und Kleinschreibung unterschieden wird:Oder in einer einzigen Zeile:
quelle
Angenommen, wir möchten die Zeichenfolgenvariable
needle
in der Zeichenfolgenvariablen findenhaystack
. Es gibt drei Fallstricke:string.toUpperCase
und vermeidenstring.toLowerCase
. Verwenden Sie stattdessen einen regulären Ausdruck, bei dem Groß- und Kleinschreibung ignoriert wird. Zum Beispielvar needleRegExp = new RegExp(needle, "i");
gefolgt vonneedleRegExp.test(haystack)
.needle
. Achten Sie darauf, dassneedle
keine Sonderzeichen für reguläre Ausdrücke enthalten sind . Entkomme diesen mitneedle.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
.needle
undhaystack
die Groß- und Kleinschreibung ignorieren möchten,"^"
am Anfang und"$"
am Ende Ihres Konstruktors für reguläre Ausdrücke hinzufügen .Unter Berücksichtigung der Punkte (1) und (2) wäre ein Beispiel:
quelle
ES6 +:
includes()
Gibt zurück,true
wenn essearchString
an einer oder mehreren Positionen oder auffalse
andere Weise angezeigt wird .quelle
Wenn Sie sich Sorgen über den Fall "nicht abgeschlossene Zeichenklasse" machen, ist es hilfreich, alle nicht alphanumerischen Zeichen zu entfernen:
quelle
Ich mag die Antwort von @ CHR15TO, im Gegensatz zu anderen Antworten, die ich auf andere ähnliche Fragen gesehen habe, zeigt diese Antwort tatsächlich, wie man einer vom Benutzer bereitgestellten Suchzeichenfolge richtig entgeht (anstatt zu sagen, dass dies notwendig wäre, ohne zu zeigen, wie).
Es ist jedoch immer noch ziemlich klobig und möglicherweise relativ langsam. Warum also nicht eine spezifische Lösung für die wahrscheinlich übliche Anforderung an Codierer haben? (Und warum nicht in die ES6 API BTW aufnehmen?)
Meine Antwort [ https://stackoverflow.com/a/38290557/887092] auf eine ähnliche Frage ermöglicht Folgendes:
quelle
Es gibt zwei Möglichkeiten für einen Vergleich ohne Berücksichtigung der Groß- und Kleinschreibung:
Konvertieren Sie Zeichenfolgen in Großbuchstaben und vergleichen Sie sie dann mit dem strengen Operator (
===
). Wie streng Operatoren mit Operanden umgehen, lesen Sie unter: http://www.thesstech.com/javascript/relational-logical-operatorsMustervergleich mit String-Methoden:
Verwenden Sie die Zeichenfolgenmethode "search" für die Suche ohne Berücksichtigung der Groß- und Kleinschreibung. Weitere Informationen zur Suche und zu anderen Zeichenfolgenmethoden finden Sie unter: http://www.thesstech.com/pattern-matching-using-string-methods
quelle
Ich mache das oft und verwende einen einfachen 5-Zeilen-Prototyp, der Varargs akzeptiert. Es ist schnell und funktioniert überall .
quelle
Sie können alles in Kleinbuchstaben schreiben:
quelle
Ich habe festgestellt, dass, wenn der Benutzer eine Textzeichenfolge eingibt, die Eingabe jedoch verlässt, ohne eine der Optionen für die automatische Vervollständigung auszuwählen, in der ausgeblendeten Eingabe kein Wert festgelegt wird, selbst wenn die Zeichenfolge mit einer im Array übereinstimmt. Mit Hilfe der anderen Antworten habe ich Folgendes gemacht:
quelle