Javascript正则表达式:替换大括号

Javascript正则表达式:替换大括号,javascript,regex,Javascript,Regex,各位 我试图用多次出现的“${country\u id}”替换一大块字符串。我需要一个可以替换${country\u id}的正则表达式。以下是我的代码: var iterLiteral = "\$\{"+literal+"\}" var re = new RegExp(iterLiteral,"g") var value = value; return body.replace(re,value) 我得到这个错误: 计算器:org.mozilla.javas

各位

我试图用多次出现的
“${country\u id}”
替换一大块字符串。我需要一个可以替换
${country\u id}
的正则表达式。以下是我的代码:

    var iterLiteral  = "\$\{"+literal+"\}"
    var re = new RegExp(iterLiteral,"g")
    var value = value;
    return body.replace(re,value)
我得到这个错误:

计算器:org.mozilla.javascript.EcmaError:无效量词}

我怎样才能修好它

编辑:

要替换的字符串:
${country\u id}
literal
正在传递给函数:
country\u id

尝试使用Anubhava所说的(使用
\\
),程序尝试搜索
\$\{country\u id\}
,但没有找到


编辑2:为什么这是重复的?前面提到的问题不是关于转义的。

如果您有一个集合正则表达式,您可能会发现使用
/
语法来定义RegExp更容易:

'foo: ${country_id}, bar: ${country_id}'.replace(/\$\{country_id\}/g, 'baz')
或者,如果必须构造字符串,则需要对斜杠进行双重转义,使其成为正则表达式的一部分,而不被视为创建字符串本身的转义字符:

'foo: ${country_id}, bar: ${country_id}'.replace(new RegExp('\\$\\{' + 'country_id' + '\\}', 'g'), 'baz')
因此,你的职能是:

function replaceLiteral(body, literal, value) {
    var iterLiteral = "\\$\\{" + literal + "\\}";
    var re = new RegExp(iterLiteral, "g");
    return body.replace(re, value)
}

var result = replaceLiteral('foo: ${country_id}, bar: ${country_id}', 'country_id', 'baz');
console.log(result);
所有这些输出相同的字符串:

'foo: baz, bar: baz'

如果
.replace
函数正确(即使用正则表达式作为第一个参数,而不是iterLiteral),则使用双斜杠应该可以工作。如果没有,代码中的其他地方就出了问题。如果是这样,请提供您正在使用的全部功能

函数fandr(文本、值、el){
var iterLiteral=“\\$\{”+文字+“\\}”,
re=新的RegExp(iterLiteral,“g”),
$el=$(el);
控制台日志(re);
$el.html(函数(){
返回$el.html().replace(re,value);
});
}
fandr(“国家id”、“香蕉”、“span”)


${country\u id}
不要使用正则表达式,它不会工作。使用真正的解析器。使用双斜杠,即
iterLiteral=“\\$\\{”+literal+“\\}”
双斜杠不起作用。使用双斜杠在什么方面不起作用?还是同样的错误吗?此外,什么是
var值=值应该做什么?詹姆斯,这不是同一个错误。它不起作用。程序试图找到“\$\{”+文字+“\}”它找不到一个。代码是一个函数的一部分,有两个参数literal和value。Dawson,你必须理解country_id不能硬编码。它作为一个参数进入函数。函数迭代了100个唯一值。因此我不能硬编码,所以不能使用第一个方法。我知道。因此第二个和第三个示例。对于那些可能找到这个答案的人来说,他们可能会发现使用第一个语法构造RegExp更容易。但是,如果他们需要灵活性,第二个和第三个就可以了(就像您的用例一样)。