Paul: regex mit variable und pluszeichen

Moin,
ich möchte per search() aus einem String ein Pluszeichen, gefolgt von einer Variablen suchen.

var str="d";  
var TextStr= "abcpluszeichendef";  
var regex = "(pluszeichen)(" + str + ")";  
  
alert(TextStr.search(regex));

Nun soll halt das pluszeichen durch ein + ersetzt werden...

Nur wie?

Paul

  1. Du notierst das + ganz normal in der RegExp, musst es aber mit einem \ davor escapen.

    alert( 'abc+def'.replace(/\+def/g, '123') );
                              ^^

    Mathias

    1. Du notierst das + ganz normal in der RegExp, musst es aber mit einem \ davor escapen.

      Klar. Nur habe ich (im Beispiel) das d in einer Variablen stehen.

      1. Du notierst das + ganz normal in der RegExp, musst es aber mit einem \ davor escapen.

        Klar. Nur habe ich (im Beispiel) das d in einer Variablen stehen.

        Das ist hier eine sehr häufig gestellte Frage. Die Lösung ist der Konstruktor new RegExp() anstelle des RegExp-Literals /.../, welcher einen String entgegennimmt:

        var varname = 'def';  
        var exp = new RegExp('\\+' + varname);  
        var str = 'abc+def';  
        alert( str.replace(exp, '123') );
        

        -> abc123

        Hier musst du \ schreiben, weil es ein String ist, das wird dann zu einem Backslash bei der Übergabe an RegExp.

        Mathias

        1. Hier musst du \ schreiben, weil es ein String ist, das wird dann zu einem Backslash bei der Übergabe an RegExp.

          Ich habe hier replace als Beispiel verwendet, bei search ist es natürlich dasselbe.

          Wenn du einen String an search übergibst, so wird er automatisch in eine RegExp umgewandelt. Also:

          'abc+def'.search('\+' + varname)

          'abc+def'.search('+' + varname) hingegen würde einen Fehler auslösen (SyntaxError: invalid quantifier). Derselbe Fehler passiert bei new RegExp('+' + varname), was zeigt, dass intern new RegExp aufgerufen wird.

          Das + muss hier eben escapet werden, sonst wird es als Quantifier behandelt. Am Beginn eines regulären Ausdrucks wäre das aber Quatsch.

          Mathias

          1. Vielen Dank!
            So läuft's.