Javascript Regexp:替换花括号

时间:2015-11-12 21:44:04

标签: javascript regex

伙计,

我正在尝试用多次出现的"${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:为什么这是重复的?提到的问题并没有谈到逃避。

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;
&#13;
&#13;