例如:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
但这当然是行不通的:) 有什么办法可以做到吗?
例如:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
但这当然是行不通的:) 有什么办法可以做到吗?
当前回答
你可以用以下两种方式之一在JS中创建正则表达式:
使用正则表达式- /ab{2}/g 使用正则表达式构造函数- new RegExp("ab{2}", "g")。
正则表达式字面量是常量,不能与变量一起使用。这可以使用构造函数来实现。RegEx构造函数的结构为
new RegExp(regularExpressionString, modifiersString)
你可以嵌入变量作为regularExpressionString的一部分。例如,
var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")
这将匹配模式cdcdcd的任何外观。
其他回答
接受的答案不适合我,也不遵循MDN的例子
请参见上面链接中的“描述”部分
我会用下面的方法,这对我来说很有效:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
你总是可以给正则表达式作为字符串,即。“ReGeX”+ testVar +“ReGeX”。您可能需要转义字符串中的某些字符(例如,双引号),但在大多数情况下它是等效的。
您还可以使用RegExp构造函数来传入标志(请参阅文档)。
只需要先准备字符串变量,然后将其转换为RegEx。
例如:
你想添加minLength和MaxLength变量到RegEx:
function getRegEx() {
const minLength = "5"; // for exapmle: min is 5
const maxLength = "12"; // for exapmle: man is 12
var regEx = "^.{" + minLength + ","+ maxLength +"}$"; // first we make a String variable of our RegEx
regEx = new RegExp(regEx, "g"); // now we convert it to RegEx
return regEx; // In the end, we return the RegEx
}
现在如果你改变了MaxLength或MinLength的值,它将在所有regx中改变。
希望对大家有用。我的英语也不好。
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
更新
根据某些评论,重要的是要注意,如果存在潜在的恶意内容(例如,变量来自用户输入),您可能需要转义变量。
ES6更新
在2019年,这通常会使用模板字符串来编写,上面的代码已经更新。最初的答案是:
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。
你可以在这里阅读更多信息。