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?

6voto

MetalGodwin Punkte 3657
String.prototype.replaceAll = function(a, b) {
    return this.replace(new RegExp(a.replace(/([.?*+^$[\]\\(){}|-])/ig, "\\$1"), 'ig'), b)
}

Testen Sie es so:

var whatever = 'Some [b]random[/b] text in a [b]sentence.[/b]'

console.log(whatever.replaceAll("[", "<").replaceAll("]", ">"))

5voto

Alex Li Punkte 51

Um mein Bedürfnis zu befriedigen, eine Variable/Alias/Funktion in einen regulären Ausdruck einzufügen, habe ich mir folgendes ausgedacht:

oldre = /xx\(""\)/;
function newre(e){
    return RegExp(e.toString().replace(/\//g,"").replace(/xx/g, yy), "g")
};

String.prototype.replaceAll = this.replace(newre(oldre), "withThis");

wobei 'oldre' die ursprüngliche Regexp ist, in die ich eine Variable einfügen möchte, 'xx' ist der Platzhalter für diese Variable/Alias/Funktion, und 'yy' ist der tatsächliche Variablenname, der Alias oder die Funktion.

5voto

keen Punkte 784

Und die CoffeeScript-Version von Steven Pennys Antwort da dies #2 der Google-Ergebnisse ist...., auch wenn CoffeeScript nur JavaScript ist, bei dem viele Zeichen entfernt wurden...;)

baz = "foo"
filter = new RegExp(baz + "d")
"food fight".match(filter)[0] // food

Und in meinem speziellen Fall:

robot.name = hubot
filter = new RegExp(robot.name)
if msg.match.input.match(filter)
  console.log "True!"

4voto

Fareed Alnamrouti Punkte 28431

Sie können dies verwenden, wenn $1 für Sie nicht funktioniert:

var pattern = new RegExp("amman", "i");
"abc Amman efg".replace(pattern, "<b>" + "abc Amman efg".match(pattern)[0] + "</b>");

4voto

scripto Punkte 2301

Hier ist eine weitere replaceAll-Implementierung:

    String.prototype.replaceAll = function (stringToFind, stringToReplace) {
        if ( stringToFind == stringToReplace) return this;
        var temp = this;
        var index = temp.indexOf(stringToFind);
        while (index != -1) {
            temp = temp.replace(stringToFind, stringToReplace);
            index = temp.indexOf(stringToFind);
        }
        return temp;
    };

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