Javascript Regexp:替换大括号

Javascript Regexp: Replace curly braces

本文关键字:替换 Regexp Javascript      更新时间:2023-09-26

Folks,

我正试图用多次出现的"${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}CCD_ 4被传递给函数:CCD_。

试图使用Anubhava所说的(使用''),程序试图搜索'$'{country_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),那么使用双斜杠应该有效。如果没有,代码中的其他地方就会出现问题。如果是这样的话,请提供您正在使用的全部功能。

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>