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
构造函数传递标志( 请参阅文档 )。