Javascript的正则expression式:如何把正则expression式中的variables?

举个例子:

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

但是,这当然不工作:)有没有办法做到这一点?

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

更新

根据一些评论,重要的是要注意,如果存在恶意内容的可能性,您可能想要跳过该variables (例如,variables来自用户input)

您可以使用RegExp对象:

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

那么你可以用任何你想要的方式构造正则regexstring

你可以在这里阅读更多。

要从JavaScript中的variables构build正则expression式,您需要使用带有string参数的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已正确地转义为正则expression式。 如果您正在处理用户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); } 

你总是可以正则expression式作为string,即"ReGeX" + testVar + "ReGeX" 。 你可能不得不转义string中的一些字符(例如双引号),但是在大多数情况下,它是等价的。

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