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