例如:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
但这当然不起作用:) 有没有办法做到这一点?
答案 0 :(得分:225)
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
根据一些评论,重要的是要注意,如果有可能存在恶意内容(例如变量来自用户输入),您可能需要escape 变量
答案 1 :(得分:73)
您可以使用RegExp对象:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
然后您可以以任何您想要的方式构建regexstring
。
您可以详细了解here。
答案 2 :(得分:30)
要在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
已正确转义为正则表达式。如果您正在处理用户输入,或者只是想让匹配特殊字符更方便,则需要escape special characters:
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);
}
答案 3 :(得分:6)
您始终可以将正则表达式作为字符串,即"ReGeX" + testVar + "ReGeX"
。您可能必须转义字符串中的某些字符(例如,双引号),但在大多数情况下它都是等效的。
您还可以使用RegExp
构造函数来传递(see the docs)中的标记。
答案 4 :(得分:3)
如果你使用es6 template literals是一个选项...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")
答案 5 :(得分:2)
接受的答案对我不起作用,并且没有关注MDN examples
查看'说明'上面链接中的部分
我选择以下为我工作:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
答案 6 :(得分:1)
这是一个非常无用的函数,它返回由特定字符包装的值。 :)
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)
答案 7 :(得分:1)
您可以通过以下两种方式之一在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
的任何外观。
答案 8 :(得分:0)
只需要先准备字符串变量,然后将其转换为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
的值,它将在所有RegEx中更改。
希望有用。也对我的英语感到抱歉。