© Bohua Xu

leetcode2283 about RegExp

Jan 12, 2023 · 3min

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")

image-20230112001915458

CC BY-NC-SA 4.0 2021-PRESENT © Bohua Xu