2016-11-02 4 views
0

Ich habe die folgende Funktion, aber meine Zeichenfolge wird nie ersetzt? Was mache ich falsch?Javascript Regex String ersetzen nicht ersetzen

function customRegex(){ 
     return function(myString,replacement,myValue){ 
     var s = myString; 
     var rgx = new RegExp("/("+replacement+")/,gi"); 
     myString = myString.replace(rgx, myValue); 
     return myString; 
    } 
    } 

    var reg = customRegex(); 
    console.log(reg("This is the worst!","worst","best")); 
    //This is always returning the original string? 

Antwort

1

Es gibt ein Problem mit der Regex-Deklaration. Sie scheinen versucht zu haben, Regex-Begrenzer hinzuzufügen, aber RegExp Konstruktor akzeptiert eine Zeichenfolge, wenn Sie ein dynamisches Muster erstellen, so werden die / als Literalsymbole im Zeichenfolgenmuster behandelt. Die Regex-Modifikatoren gi sollten als zweites String-Argument übergeben werden.

Verwenden

var rgx = new RegExp(replacement,"gi"); 

Siehe Demo unter:

function customRegex(){ 
 
     return function(myString,replacement,myValue){ 
 
     var s = myString; 
 
     var rgx = new RegExp(replacement,"gi"); 
 
     myString = myString.replace(rgx, myValue); 
 
     return myString; 
 
    } 
 
    } 
 

 
    var reg = customRegex(); 
 
    console.log(reg("This is the worst!","worst","best"));

Auch, wenn Ihr Suchmuster spezielle Regex Metazeichen enthalten können, müssen Sie sie entkommen. Siehe Is there a RegExp.escape function in Javascript? SO-Thread.