我需要使用javascript将动态值从变量转换为正则表达式。这是我的代码,但是不起作用:
var text = 'I like Blue color, My car is Blue and the book is Blue.';
var oldcolor = 'Blue';
var newcolor = 'Green';
// Does not work:
var expression = new RegExp('/'+oldcolor+'/g');
console.log(text.replace(expression, newcolor));
// This works:
console.log(text.replace(/Blue/g, newcolor));
答案 0 :(得分:0)
这里
/
将被转义,最终的正则表达式将如下所示/\/blue\/g/
,这是不希望的。 (检查下面的代码)
在这种情况下,您不需要此'/'+oldcolor+'/g'
,因为您将值本身用作完整的模式而不是模式的一部分,因此可以将其直接传递给RegExp对象。
并且标志在RegExp中以RegExp(pattern[, flags])
的形式提供。 check here for syntax
var oldcolor = 'blue';
let reg = new RegExp('/'+oldcolor+'/g');
console.log(reg)
var text = 'I like Blue color, My car is Blue and the book is Blue.';
var oldcolor = 'Blue';
var newcolor = 'Green';
//Dont Work
var expression = new RegExp(oldcolor, 'g');
console.log(text.replace(expression, newcolor));
//Work
console.log(text.replace(/Blue/g, newcolor));
如果我有一个变量,需要将其与其他模式一起插入到正则表达式中的某个地方
var text = 'I like Blue123 color';
var oldcolor = 'Blue';
var newcolor = 'Green';
//Dont Work
let reg = `${oldcolor}\\d+`
var expression = new RegExp(reg, 'g');
console.log(text.replace(expression, newcolor));