Javascript正则表达式:如何把一个变量在正则表达式?

例如:

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

但是这当然不行:) 有什么办法可以做到吗?< / p >

248321 次浏览

你总是可以给正则表达式作为字符串,即"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");

你可以使用RegExp对象:

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

然后你可以以任何你想要的方式构造regexstring

你可以阅读更多关于它在这里

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

当然,这是一个非常幼稚的例子。它假设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);
}

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

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)

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

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

接受的答案不适合我,不遵循MDN例子

请参见上面链接中的“描述”部分

我会用下面的方法,这对我来说很有效:

let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)


// that makes dynamicRegExp = /findMe/gi

你可以用以下两种方式之一在JS中创建正则表达式:

  1. 使用正则表达式文字- /ab{2}/g
  2. 使用正则表达式构造函数new RegExp("ab{2}", "g")

正则表达式字面量是常量,不能与变量一起使用。这可以使用构造函数来实现。RegEx构造函数的结构为

new RegExp(regularExpressionString, modifiersString)

你可以嵌入变量作为regularExpressionString的一部分。例如,

var pattern="cd"
var repeats=3
new RegExp(`${pattern}{${repeats}}`, "g")

这将匹配模式cdcdcd的任何外观。

只需要先准备字符串变量,然后将其转换为RegEx。

例如:

你需要将minLengthMaxLength与变量一起添加到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
}

现在如果你改变了MaxLengthMinLength的值,它将在所有regx中改变。

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