JS match regex variable

nietaL

NGBler
Registriert
8 Sep. 2013
Beiträge
231
Ort
Exilgullianer
Hey Leute,

[src=javascript]var string = "Menschen";
var pattern = "Mensch";

if(string.match(pattern)) {alert('Treffer');}[/src]

In diesem Beispiel landet er einen Treffer. Gibt es eine unkomplizierte Möglichkeit, dass er nur nach GENAU dem String sucht, der hinter der Variable pattern steckt? Ich denke, dass ich reguläre Ausdrücke brauche, vor denen es mir aber immer graut. :confused:
 
if(string === pattern){}

Genau in diesem Fall brauchst keine RegEx. Der identity-Operator (===) ist theoretisch nicht nötig, verhindert aber eine eventuelle Type Conversion, ist daher performanter & gleich auch noch sicherer, falls aufgrund der Ausgangsdaten eine Typkollision auftritt.

Wenn Du es mit RegEx machen willst, funktioniert das so:
var pattern = /^Mensch$/;

Das "^" bedeutet, der Begriff muss am Anfang der geprüften Zeichenkette stehen, das "$" bedeutet genau das Gegenteil, also der Suchbegriff muss am Ende des Strings stehen.

Die Literal-Schreibweise in "/" erfordert keine Anführungszeichen und ist dem "var foo = new RegExp('')" vorzuziehen.
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #3
Danke!

Ich muss noch etwas ausholen. Es gibt ein Array:

[src=javascript]var soldaten = ["Schütze (3)", "Scharfschütze", "Panzeranwehr (4)", "Sanitäter"];[/src]

Wie man sieht, haben die Einträge ab und an eine Zahl in Klammern dahinter. Wenn ich jetzt auf einen Eintrag prüfen möchte, habe ich aber nur die reinen Namen zur Verfügung: z.B. Schütze (ohne Klammern dahinter)

[src=javascript]function (name)
{
for(var i=0; i < soldaten.length-1; i++) // Array durchlaufen
{
if(soldaten.match(name)) // im Array nach Namen suchen
{
soldaten.splice(i,1); // Treffer aus Array entfernen
}
}
}[/src]

Wenn ich einen direkten Vergleich mit = durchführe, wie von dir vorgeschlagen, findet er bei name="Schütze" eben nicht "Schütze (3)". Mache ich ein match(name), wie in meinem Code, findet er zwar "Schütze (3)" aber auch gleich "Scharfschütze" wegen des Teilstrings -schütze.
 
Kannst du in dem Array Soldaten nicht alle Werte als Regex mit;
/^MeinText$/

schreiben und darauf überprüfen?
 
Du willst also testen, ob ein String mit [kw]Schütze[/kw] beginnt? Geht ganz einfach: [src=javascript]if (soldat.indexOf('Schütze') === 0) // ohne Regex
if (soldat.match(/^Schütze/)) // oder auch mit Regex[/src]
 
Zurück
Oben