Javascript Regex:如何将变量放在正则表达式中?

例如:

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

但这当然不起作用:)有没有办法做到这一点?

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

更新

根据一些评论,重要的是要注意,如果存在恶意内容的可能性,您可能想要转义 变量 (例如,变量来自用户输入)

您可以使用RegExp对象:

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

然后你可以用你想要的任何方式构造regexstring

你可以在这里阅读更多相关信息。

要从JavaScript中的变量构建正则表达式,您需要将RegExp构造函数与字符串参数一起使用。

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

当然,这是一个非常天真的例子。 它假定input已正确转义为正则表达式。 如果您正在处理用户输入,或者只是想让匹配特殊字符更方便,则需要转义特殊字符 :

 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); } 

您始终可以将正则表达式作为字符串,即"ReGeX" + testVar + "ReGeX" 。 您可能必须转义字符串中的一些字符(例如,双引号),但在大多数情况下它是等效的。

您还可以使用RegExp构造函数传递标志( 请参阅文档 )。

如果你正在使用es6 模板文字是一个选项…

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

接受的答案对我不起作用,不遵循MDN示例

请参阅上面链接中的“说明”部分

我会跟着以下它为我工作:

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

这是一个非常无用的函数,它返回由特定字符包装的值。 🙂

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)