如何将RegExp替换模板与$ {var}一起使用?

时间:2019-05-17 08:34:35

标签: javascript node.js

例如:

使用/ \ $ {key} /,因为常规字符串可以,替换成功了

但是直接使用字符串'$ {key}',答案不是我想要的

如果我使用split and join会更慢吗?

let tp1 = "XXX${key}XXX${key}XXX${key}XXX${key}";
tp1 = tp1.replace(new RegExp(/\${key}/, 'g'), 'AA');
console.log(tp1)

let tp2 = "XXX${key}XXX${key}XXX${key}XXX${key}";
tp2 = tp2.replace(new RegExp('${key}', 'g'), 'AA');
console.log(tp2)

let tp3 = "XXX${key}XXX${key}XXX${key}XXX${key}";
tp3 = tp3.split(`\${key}`).join('AA')
console.log(tp3)
Answer:
tp1: XXXAAXXXAAXXXAAXXXAA
tp2: XXX${key}XXX${key}XXX${key}XXX${key}
tp3: XXXAAXXXAAXXXAAXXXAA

3 个答案:

答案 0 :(得分:4)

$在正则表达式中表示字符串的结尾,这就是为什么您需要使用\对其进行转义的原因。如果您使用带有正则表达式字符串的构造函数,则需要对其进行两次转义:'\\${key}',以使其在字符串中保持反斜杠

let tp1 = "XXX${key}XXX${key}XXX${key}XXX${key}";
tp1 = tp1.replace(new RegExp(/\${key}/, 'g'), 'AA');
console.log(tp1)

let tp2 = "XXX${key}XXX${key}XXX${key}XXX${key}";
tp2 = tp2.replace(new RegExp('\\${key}', 'g'), 'AA');
console.log(tp2)

let tp3 = "XXX${key}XXX${key}XXX${key}XXX${key}";
tp3 = tp3.split(`\${key}`).join('AA')
console.log(tp3)

答案 1 :(得分:2)

考虑定义一个函数而不是正则表达式,该函数接受key并返回替换后的字符串,从而允许您使用模板文字:

const insertKey = (key) => `XXX${key}XXX${key}XXX${key}XXX${key}`;
console.log(
  insertKey('AA'),
  insertKey('foo')
);

答案 2 :(得分:2)

如果要将其用作占位符,则只需使用不同的引号``而不是''

let key = 'BB';
let tp2 = "XXXBBXXXBBXXXBBXXXBB";
tp2 = tp2.replace(new RegExp(`${key}`, 'g'), 'AA');
console.log(tp2); //XXXAAXXXAAXXXAAXXXAA

key = '\\${key}';
let tp3 = "XXX${key}XXX${key}XXX${key}XXX${key}";
tp3 = tp3.replace(new RegExp(`${key}`, 'g'), 'AA');
console.log(tp3); //XXXAAXXXAAXXXAAXXXAA