1924 Stimmen

Wie verwendet man eine Variable in einem regulären Ausdruck?

Ich würde gerne eine String.replaceAll() Methode in JavaScript und ich denke, dass die Verwendung einer Regex wäre am knappsten Weg, es zu tun. Allerdings kann ich nicht herausfinden, wie man eine Variable in eine Regex übergeben. Ich kann dies bereits tun, die alle Instanzen von ersetzen wird "B" con "A" .

"ABABAB".replace(/B/g, "A");

Aber ich möchte etwas in dieser Art machen:

String.prototype.replaceAll = function(replaceThis, withThis) {
    this.replace(/replaceThis/g, withThis);
};

Aber natürlich wird dadurch nur der Text ersetzt "replaceThis" ...also wie übergebe ich diese Variable an meine Regex-Zeichenkette?

40voto

Zombo Punkte 1

Für alle, die eine Variable mit dem Spiel Methode, das hat bei mir funktioniert:

var alpha = 'fig';
'food fight'.match(alpha + 'ht')[0]; // fight

37voto

tvanfosson Punkte 506878
this.replace( new RegExp( replaceThis, 'g' ), withThis );

24voto

Salman A Punkte 246207

Sie müssen den regulären Ausdruck dynamisch erstellen und dazu müssen Sie die new RegExp(string) Konstruktor mit Escaping .

Es gibt eine eingebaute Funktion in jQuery UI-Widget zum automatischen Vervollständigen genannt. $.ui.autocomplete.escapeRegex :

Es nimmt ein einzelnes Zeichenfolgenargument und gibt alle Regex-Zeichen aus, und macht das Ergebnis sicher für die Übergabe an new RegExp() .

Wenn Sie jQuery UI nicht verwenden, können Sie dessen Definition kopieren von der Quelle :

function escapeRegex( value ) {
    return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
}

Und verwenden Sie es so:

"[z-a][z-a][z-a]".replace(new RegExp(escapeRegex("[z-a]"), "g"), "[a-z]");
//            escapeRegex("[z-a]")       -> "\[z\-a\]"
// new RegExp(escapeRegex("[z-a]"), "g") -> /\[z\-a\]/g
// end result                            -> "[a-z][a-z][a-z]"

10voto

unigogo Punkte 537
String.prototype.replaceAll = function (replaceThis, withThis) {
   var re = new RegExp(replaceThis,"g"); 
   return this.replace(re, withThis);
};
var aa = "abab54..aba".replaceAll("\\.", "v");

Test mit diesem Werkzeug

7voto

Sie können eine Zeichenkette als regulären Ausdruck verwenden. Vergessen Sie nicht die Verwendung von neu RegExp .

Beispiel:

var yourFunction = new RegExp(
        '^-?\\d+(?:\\.\\d{0,' + yourVar + '})?'
      )

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