2016-07-15 80 views
0

我有正则表达式替换字符串中的html代码的问题。我曾尝试使用匹配的在线正则表达式测试程序,但导致我无法替换。 $ {ProductEAN}是我想要替换的。任何想法有什么不对?JavaScript替换正则表达式不起作用

字符串是在这里:

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

Javascript代码:

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

如果它对您有帮助,请确保将最佳答案标记为已接受。这样它就不会显示为没有答案。 – rvighne

回答

0

您需要正确转义反斜线

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

和替换字符串赋值。

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

这不是问题。该字符串实际上没有被正确替换。 – rvighne

0

这应做到:

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没有解释 –

2

RegExp构造不需要周围的表达斜杠(/.../),即仅适用于正则表达式文字。当你使用反斜线转义字符时,它们会在传递给构造函数的字符串中被转义,但是会传递给实际的正则表达式。他们需要双重逃脱。因此,行改成这样:

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

这个工作对我来说,谢谢你的解释。 – robertnovak

-1

试试这个:

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

当正则表达式调用,你不必把/的你也应该不需要的()。

此处了解详情:http://www.javascriptkit.com/jsref/regexp.shtml

此外,您还可以摆脱咱们的。他们不需要。

+0

为什么你不需要括号? –

+1

“另外,你可以摆脱让步,他们不需要。”你什么意思?你不知道他在这里的背景,所以他可能想要“let”。 –

+0

let语句声明一个块作用域局部变量,它是需要的 –