例如:

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

但这当然是行不通的:) 有什么办法可以做到吗?


当前回答

你总是可以给正则表达式作为字符串,即。“ReGeX”+ testVar +“ReGeX”。您可能需要转义字符串中的某些字符(例如,双引号),但在大多数情况下它是等效的。

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

其他回答

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

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

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

你可以用以下两种方式之一在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

你可以使用RegExp对象:

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

然后,您可以以任何您想要的方式构造regexstring。

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

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

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