2016-07-15 17 views
0

Ich habe ein Problem mit regexp für HTML-Code in Zeichenfolge ersetzen. Ich hatte versucht, online Regexp Tester mit Match, aber etwas verursacht, dass ich ersetzen kann. $ {ProductEAN} ist was ich ersetzen möchte. Irgendeine Idee was falsch ist?Javascript ersetzen Regex nicht funktionieren

Der String ist hier:

<label for="ProductEAN" id="ProductEAN" class="col-sm-3 control-label">${ProductEAN}</label> 

Javascript-Code:

let strToReplace = 'ProductEAN'; 
let reg = new RegExp('/(\$\{'+strToReplace+'\})/','g') 
     str.replace(reg,'some text'); 
+0

Achten Sie darauf, die beste Antwort als akzeptiert zu markieren, wenn es Ihnen geholfen hat. So erscheint es nicht als unbeantwortet. – rvighne

Antwort

0

Sie richtige brauchen, um die Schrägstriche

reg = new RegExp('\\$\\{' + strToReplace + '\\}', 'g'); 

und einen Auftrag für das ausgetauschte Zeichenfolge zu entkommen.

newString = str.replace(reg,'some text'); 

var element = document.getElementById('ProductEAN'), 
 
    strToReplace = 'ProductEAN', 
 
    reg = new RegExp('\\$\\{' + strToReplace + '\\}', 'g'); 
 

 
element.innerHTML = element.innerHTML.replace(reg,'some text');
<label for="ProductEAN" id="ProductEAN" class="col-sm-3 control-label">${ProductEAN}</label>

+0

Das ist nicht das Problem. Die Zeichenfolge wird nicht richtig ersetzt. – rvighne

0

Dies sollte es tun:

var str = '<label for="ProductEAN" id="ProductEAN" class="col-sm-3 control-label">${ProductEAN}</label>'; 
var strToReplace = 'ProductEAN'; 
var reg = new RegExp('(\\${'+strToReplace+'})','g') 
str.replace(reg,'some text'); 
+1

Downvote für keine Erklärung –

2

Der RegExp Konstruktor nicht Schrägstriche müssen (/.../) um den Ausdruck, das ist nur für regex Literale. Und wenn Sie Backslash-Escape-Zeichen verwenden, werden sie in der an den Konstruktor übergebenen Zeichenfolge maskiert, übergeben aber unrescaped an den tatsächlichen Regex-Ausdruck. Sie müssen doppelt entkommen. So ändern Sie die Zeile dazu:

let reg = new RegExp('\\$\\{'+strToReplace+'\\}','g'); 
+0

Diese Arbeit für mich, danke für die Erklärung. – robertnovak

-1

Versuchen Sie folgendes:.

new RegExp('\$\{' + strToReplace + '\}','g') 

Wenn mit RegExp aufgerufen, Sie müssen nicht in der/'s setzen Sie sollten auch nicht brauchen die() 's.

Mehr Infos hier: http://www.javascriptkit.com/jsref/regexp.shtml

Auch können Sie loszuwerden, die lassen Sie uns. Sie werden nicht benötigt.

+0

Warum brauchen Sie die Klammern nicht? –

+1

"Außerdem können Sie die Let's loswerden. Sie werden nicht benötigt." Was meinen Sie? Sie haben keine Ahnung von seinem Kontext hier, also könnte er möglicherweise die 'Let's wollen. –

+0

Die let-Anweisung deklariert eine lokale Variable des Blockbereichs, sie wird benötigt –