我想在字符串中替换字符(用变量),这是我的示例:
var oldId = 5;
var newId = 6;
var content = 'text tes_5 as name[5] end';
content = content.replace(new RegExp('name\['+oldId+'\]', 'g'), 'name['+newId+']');
为什么结果是text tes_5 as name[5] end
?
答案 0 :(得分:9)
使用正则表达式构造函数时,请进行两次转义:
var oldId = 5;
var newId = 6;
var content = 'text tes_5 as name[5] end';
content = content.replace(new RegExp('name\\['+oldId+'\\]', 'g'), 'name['+newId+']');
console.log(content);
答案 1 :(得分:2)
您需要转义反斜杠,因为反斜杠是字符串文字和正则表达式的转义字符。
var oldId = 5;
var newId = 6;
var content = 'text tes_5 as name[5] end';
content = content.replace(new RegExp('name\\['+oldId+'\\]', 'g'), 'name['+newId+']');
console.log(content);
在ES6中,您可以使用带有String.raw
标签的模板文字。这样一来,它就无法处理文字内部的转义序列。
var oldId = 5;
var newId = 6;
var content = 'text tes_5 as name[5] end';
content = content.replace(new RegExp(String.raw`name\[${oldId}\]`, 'g'), 'name['+newId+']');
console.log(content);