js正则表达式中添加变量
最近在刷力扣的时候遇到一个easy题,第一想法是通过正则来解决,但是因为要在正则表达式中添加变量才可以解决,解题方法还有很多,但是想尝试使用这个方法。
let i = "a";
let e = str.match(eval("/" + i + "/g"))
let i = "a";
let e = str.match(eval("/" + i + "/g"))
但是,当想在e这个正则中使用i时会发现无法处理
js中所有的对象都是通过构造函数生成的
那么,我们就可以用构造函数来代替字面量定义法,例如:
var s = new String("string"); //String对象,toString()后为"string"
var a = new Array(1,2); //[1,2]
var o = new Object(); //{}
var s = new String("string"); //String对象,toString()后为"string"
var a = new Array(1,2); //[1,2]
var o = new Object(); //{}
相应的,我们也可以用构造函数来生成正则表达式
var re = new RegExp("^\d+quot;,"gim"); //注意,反斜杠需要转义
var re = new RegExp("^\d+quot;,"gim"); //注意,反斜杠需要转义
那么,给它加变量,就和我们前面写的给字符串加变量一样了。
var v = "bl";
var re =new RegExp("^\d+" + v + "quot;,"gim"); // re为/^d+bl$/gim
var v = "bl";
var re =new RegExp("^\d+" + v + "quot;,"gim"); // re为/^d+bl$/gim
另外,还有一种方法是用过eval
动态执行一段字符串的方法,但是eval
是一个危险的函数,且**eval() 通常比其他替代方法更慢,因为它必须调用 JS 解释器,而许多其他结构则可被现代 JS 引擎进行优化。**弊端还有很多。
var re = eval("/^\d+" + v + "$/gim")
var re = eval("/^\d+" + v + "$/gim")