例如:

function(input){
    var testVar = input;
    string = ...
    string.replace(/ReGeX + testVar + 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。

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

其他回答

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

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

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

更新

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

ES6更新

在2019年,这通常会使用模板字符串来编写,上面的代码已经更新。最初的答案是:

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

只需要先准备字符串变量,然后将其转换为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中改变。

希望对大家有用。我的英语也不好。

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

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

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

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)