Ich möchte feststellen, ob der String mindestens zwei gleiche Elemente aus dem Array enthält
const array = ["!", "?"];
const string1 = "!hello"; // should return false
const string2 = "!hello?"; // should return false
const string3 = "!hello!"; // should return true
const string4 = "hello ??"; // should return true
const string5 = "hello ?test? foo"; // should return true
const string6 = "hello ?test ?? foo"; // should return true
Ich bin mir nicht sicher, was besser sein wird: ein Regex oder eine Funktion? Jeder wäre in Ordnung.
Ich habe es versucht:
const array = ["!", "?"];
const string = "test!";
array.every(ar => !string.includes(ar));
Es wird jedoch nur erkannt, ob mindestens 1 Element aus dem Array vorhanden ist, nicht 2.
javascript
node.js
regex
function
Pleklo
quelle
quelle
Antworten:
Sie können es verwenden
Array#some
undString#split
tun:Wie funktioniert es?
Lass uns trennen (ich meine auf
split()
)!Array#some
, um zu testen, ob mindestens ein Element des Arrays bestanden werden soll (dh entweder?
oder!
).char
Teilen Sie die Zeichenfolge auf und zählen Sie, wie viele Teile wir habenn
Teile haben, bedeutet dies, dass wirn-1
Orte haben, an denen diechar
Übereinstimmungen stattfinden. (zB 2 -|
Splits eine Zeichenkette in 3 Teile:a|b|c
)quelle
Eine andere Möglichkeit besteht darin, ein Muster mit einer Erfassungsgruppe und einer dynamisch erstellten Zeichenklasse für
[!?]
und eine Rückreferenz\1
auf das zu verwenden, was in Gruppe 1 erfasst wird, um sicherzustellen, dass 2 der gleichen Zeichen vorhanden sind.Regex-Demo
Zum Beispiel
quelle
]
,^
etc.Sie können Zeichenfolgen
split
und Arrayslength
wie folgt verwenden :BEARBEITEN : Verwenden der for-Schleife
quelle
Sie können einer sehr einfachen Lösung wie unten folgen. Teilen Sie die Zeichenfolge mit dem Zeichen im Array. Überprüfen Sie die linke Seite des Split-Vorgangs. Wenn die Länge mindestens 2 beträgt, geben Sie true zurück, andernfalls false.
Hier ist ein Beispiel für jsFiddle: https://jsfiddle.net/sagarag05/qk8f2Lz7/
quelle
Erstellen Sie eine Funktion, die für die
n
Anzahl der zu findenden Vorkommen nützlich sein kannquelle
Verwenden Sie Loop-over-Array und zählen Sie das Auftreten und prüfen Sie, ob das Auftreten größer als 1 ist.
quelle
Hier ist ein Regex-Trick-Ansatz. Wir können versuchen, alle Zeichen aus der Eingabe zu entfernen, die nicht Teil der zu findenden Zeichenklasse sind. Stellen Sie dann sicher, dass mindestens zwei verschiedene Zeichen in der Eingabe verbleiben.
Die Logik hier ist ziemlich einfach. Am Beispiel der Eingabe
!hello?
entfernen wir zuerst alle Nicht-Markierungszeichen und lassen uns mit!?
. Dann verwenden wir einen regulären Ausdruck, um zu behaupten, dass noch mindestens zwei verschiedene Zeichen übrig sind. Dies gilt für diese Eingabe, daher drucken wirMATCH
.Bearbeiten:
Verwenden Sie Folgendes, um die Regex-Abwechslung aus Ihrem Eingabearray zu erstellen
join
:quelle
Hierfür gibt es eine viel einfachere Lösung:
Wir können daraus eine Funktion zum Testen machen:
Hinweis: Mein Code hat sich einige Male geändert und war am Ende nahe an der akzeptierten Antwort und ich habe es nicht bemerkt. Das heißt, Sie müssen nichts subtrahieren, so dass dieser Teil unnötig ist.
quelle
quelle