Regex Javascript: Como colocar uma variável dentro de uma expressão regular?

Então, por exemplo:

function(input){ var testVar = input; string = ... string.replace(/ReGeX + testVar + ReGeX/, "replacement") } 

Mas isso obviamente não está funcionando 🙂 Existe alguma maneira de fazer isso?

 var regex = new RegExp("ReGeX" + testVar + "ReGeX"); ... string.replace(regex, "replacement"); 

Atualizar

Por alguns dos comentários, é importante notar que você pode querer escaping da variável se houver potencial para conteúdo malicioso (por exemplo, a variável vem da input do usuário)

Você pode usar o object RegExp:

 var regexstring = "whatever"; var regexp = new RegExp(regexstring, "gi"); var str = "whateverTest"; var str2 = str.replace(regexp, "other"); document.write(str2); 

Então você pode construir a regexstring da maneira que quiser.

Você pode ler mais sobre isso aqui .

Para construir uma expressão regular a partir de uma variável em JavaScript, você precisará usar o construtor RegExp com um parâmetro de string.

 function reg(input) { var flags; //could be any combination of 'g', 'i', and 'm' flags = 'g'; return new RegExp('ReGeX' + input + 'ReGeX', flags); } 

Claro, este é um exemplo muito ingênuo. Assume-se que a input foi escapada corretamente para uma expressão regular. Se você está lidando com a input do usuário, ou simplesmente quer torná-lo mais conveniente para combinar caracteres especiais, você precisará escaping caracteres especiais :

 function regexEscape(str) { return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') } function reg(input) { var flags; //could be any combination of 'g', 'i', and 'm' flags = 'g'; input = regexEscape(input); return new RegExp('ReGeX' + input + 'ReGeX', flags); } 

Você sempre pode dar expressão regular como string, ou seja, "ReGeX" + testVar + "ReGeX" . Você possivelmente terá que escaping de alguns caracteres dentro de sua string (por exemplo, aspas duplas), mas na maioria dos casos é equivalente.

Você também pode usar o construtor RegExp para transmitir sinalizadores ( consulte os documentos ).

se você estiver usando literais de modelo es6, é uma opção …

 string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement") 

resposta aceita não funciona para mim e não segue exemplos MDN

veja a seção ‘Descrição’ no link acima

Eu vou com o seguinte, está funcionando para mim:

 let stringThatIsGoingToChange = 'findMe'; let flagsYouWant = 'gi' //simple string with flags let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, 'flagsYouWant') // that makes dynamicRegExp = /findMe/gi 

Aqui está uma function bem inútil que retorna valores envolvidos por caracteres específicos. 🙂

jsfiddle: https://jsfiddle.net/squadjot/43agwo6x/

 function getValsWrappedIn(str,c1,c2){ var rg = new RegExp("(?< =\\"+c1+")(.*?)(?=\\"+c2+")","g"); return str.match(rg); } var exampleStr = "Something (5) or some time (19) or maybe a (thingy)"; var results = getValsWrappedIn(exampleStr,"(",")") // Will return array ["5","19","thingy"] console.log(results)