416 Stimmen

Umwandlung der Benutzereingabe in einen regulären Ausdruck

Ich entwickle ein Prüfprogramm für reguläre Ausdrücke in HTML und JavaScript. Der Benutzer gibt einen Regex, eine Zeichenkette, ein und wählt die Funktion, mit der er testen möchte (z.B. Suchen, Vergleichen, Ersetzen, etc.) per Radiobutton und das Programm zeigt die Ergebnisse an, wenn diese Funktion mit den angegebenen Argumenten ausgeführt wird. Natürlich gibt es zusätzliche Textfelder für die zusätzlichen Argumente zum Ersetzen und so weiter.

Mein Problem ist es, die Zeichenfolge vom Benutzer zu erhalten und sie in einen regulären Ausdruck zu verwandeln. Wenn ich sage, dass sie nicht brauchen, um zu haben // um den eingegebenen Regex herum, dann können sie keine Flags setzen, wie g y i . Sie müssen also über die // um den Ausdruck herum, aber wie kann ich diese Zeichenfolge in einen Regex umwandeln? Sie kann kein Literal sein, da sie eine Zeichenkette ist, und ich kann sie nicht an den RegExp-Konstruktor übergeben, da sie keine Zeichenkette ohne das // 's. Gibt es eine andere Möglichkeit, eine Benutzereingabe in eine Regex zu verwandeln? Muss ich die Zeichenkette und die Flags der Regex mit dem // Wie kann man sie dann anders konstruieren? Sollte ich sie eine Zeichenkette eingeben lassen und dann die Flaggen separat eingeben?

1voto

Gene Bo Punkte 9862

Dank früherer Antworten dient dieser Block gut als Allzwecklösung für die Anwendung einer konfigurierbaren Zeichenfolge in einem RegEx zum Filtern von Text:

var permittedChars = '^a-z0-9 _,.?!@+<>';
permittedChars = '[' + permittedChars + ']';

var flags = 'gi';
var strFilterRegEx = new RegExp(permittedChars, flags);

log.debug ('strFilterRegEx: ' + strFilterRegEx);

strVal = strVal.replace(strFilterRegEx, '');
// this replaces hard code solt:
// strVal = strVal.replace(/[^a-z0-9 _,.?!@+]/ig, '');

-6voto

Playhi Punkte 121

Ich benutze eval um dieses Problem zu lösen.

Zum Beispiel:

    function regex_exec() {

        // Important! Like @Samuel Faure mentioned, Eval on user input is a crazy security risk, so before use this method, please take care of the security risk. 
        var regex = $("#regex").val();

        // eval()
        var patt = eval(userInput);

        $("#result").val(patt.exec($("#textContent").val()));
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X