伙计,
我正在尝试用多次出现的"${country_id}"
替换一大块字符串。我需要一个可以替换${country_id}
的正则表达式。这是我的代码:
var iterLiteral = "\$\{"+literal+"\}"
var re = new RegExp(iterLiteral,"g")
var value = value;
return body.replace(re,value)
我收到此错误:
评估者:org.mozilla.javascript.EcmaError:无效的量词}
我该如何解决?
编辑:
要替换的字符串:${country_id}
literal
被传递给函数:country_id
。
尝试使用Anubhava所说的内容(使用\\
),该程序会尝试搜索\$\{country_id\}
但找不到。{/ p>
编辑2:为什么这是重复的?提到的问题并没有谈到逃避。
答案 0 :(得分:1)
如果你有一个正则表达式,你可能会发现使用//
语法来定义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'
答案 1 :(得分:0)
如果您的.replace
函数正确(意味着您使用正则表达式作为第一个参数,而不是iterLiteral),则使用双斜杠应该有效。如果它没有,那么代码中的其他地方就会出现问题。如果是这种情况,请提供您正在使用的全部功能。
function fandr(literal, value, el) {
var iterLiteral = "\\$\\{" + literal + "\\}",
re = new RegExp(iterLiteral, "g"),
$el = $(el);
console.log(re);
$el.html(function() {
return $el.html().replace(re, value);
});
}
fandr("country_id", "banana", "span");

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span>${country_id}</span>
&#13;