© Bohua Xu

leetcode2283 about RegExp

Jan 12, 2023 · 3min

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

image-20230112001915458

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