Regular Expression (RegExp) aus String in JavaScript (JS)

In PHP hatte ich in der täglichen Arbeit schon oft mit regulären Ausdrücken (auch Regular Expressions oder kurz RegExp genannt) zu tun, in JavaScript habe ich damit bisher nur selten gearbeitet. Für ein aktuelles Projekt musste ich aber aus einem Array von Strings die regulären Ausdrücke erzeugen und hatte einige Zeit damit zu tun, herauszufinden wie das geht.

Reguläre Ausdrücke werden in JavaScript einfach durch die Begrenzer „/“ definiert, also z.B. so:

// RegExp-Definition
myregexp = /regexp/;
// Such-String
searchstring = "Das mit den regexp macht Spaß";
// RegExp anwenden
var result = searchstring.search(myregexp);
// und Ergebnis ausgeben
if(result != -1) document.write("Gefunden");
else document.write("Nicht gefunden");

JavaScript erkennt anhand der Delimiter (Begrenzer) „/“, dass es sich um einen regulären Ausdruck handelt. Wenn jetzt aber das Suchmuster als Zeichenkette vorliegt, dann funktioniert das nicht. Hier ist es aber auch ganz einfach möglich, ein Objekt vom Typ RegExp zu erzeugen:

// JavaScript-RegExp aus Zeichenkette erzeugen
myregexp = new RegExp("suchmuster");
// Als 2. Parameter können die RegExp-Modifier angegeben werden
myregexp2 = new RegExp("suchmuster", "ig");

Nur mal so als Tipp…

Zusatztipp: Die Suchmuster sind normalerweise zu „escapen“ (d.h. alle vorkommenden „/“ durch die Variante mit vorangestelltem „“ zu ersetzten) also aus „/“ wird „/“. Das ist bei der Variante aus dem String nicht notwendig. Sehr praktisch. Die regexp-relevanten Zeichen müssen trotzdem mit Backslashes versehen werden, was natürlich wiederum per RegExp geschehen kann (bei Bedarf einfach eine kleine Funktion basteln):

// Punkt escapen durch Backslash voranstellen
mstr=mstr.replace(/./g,".");

Ich wünsche ein allzeit freudiges RexExp-Hacking!

3 Gedanken zu „Regular Expression (RegExp) aus String in JavaScript (JS)“

  1. Hallo,
    so ein Problem habe ich auch, aber das könnte ich noch nicht machen.
    wenn ich RegExp so definiere
    var r=/(d{1,2})[.](d{1,2})[.](d{4})$/;
    result = r.test(„12.12.2012″);

    das laeuft.

    Aber RegExp bekomme ich als String deswegen habe ich Probleme.

    var r=“/(d{1,2})[.](d{1,2})[.](d{4})$/“;
    //var r=“(d{1,2})[.](d{1,2})[.](d{4})$“;
    var r=new RegExp(r);
    result = r.test(„12.12.2012“);

    wie kann ich dieses Problem beheben?

    Danke für kommende Antwort

    Gruß

    Hay

    1. Hallo Hay,
      ich denke, dass ich das Problem in Deinem Versuch gefunden habe: im String musst Du zwar – wie oben beschrieben und wie Du es schon richtig gemacht hast – die „/“ am Anfang und Ende der Regexp weglassen, aber da es sich um einen String handelt, wirken nun die „“ vor dem „d“ wie ein Escape-Zeichen. Das bedeutet, dass er das „d“ nicht mehr als „Ziffer“ interpretiert, sondern einfach als „d“. Das kannst Du leicht unterbinden, indem Du dem „“ ein weiteres „“ voranstellst. Somit lautet die betreffende Zeile also:

      var r=”(d{1,2})[.](d{1,2})[.](d{4})$”;

      Ich hoffe das hilft Dir weiter.

      Alles Gute,
      Gabriel

  2. hi Gabriel,

    danke für deine Antwort. das hilft mir schon.

    viele Grüße

    hay

Schreibe einen Kommentar