因此,例如:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
但这当然是行不通的:)有什么办法可以做到这一点?
因此,例如:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
但这当然是行不通的:)有什么办法可以做到这一点?
Answers:
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
根据一些评论,请务必注意,如果可能存在恶意内容(例如,变量来自用户输入),则可能需要转义该变量
在2019年,这通常使用模板字符串编写,并且上面的代码已更新。最初的答案是:
var regex = new RegExp("ReGeX" + testVar + "ReGeX");
...
string.replace(regex, "replacement");
/\w+\//i
变得如此new RegExp("\\w+/", "i")
您可以使用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);
}
ReGeX
文本。因此,我使用了:return new RegExp(input, flags);
您总是可以将正则表达式指定为字符串,即 "ReGeX" + testVar + "ReGeX"
。您可能必须在字符串中转义一些字符(例如,双引号),但是在大多数情况下,这是等效的。
您还可以使用RegExp
构造函数来传递标志(请参阅docs)。
您可以通过以下两种方式之一在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
。
这是一个非常无用的函数,它返回由特定字符包装的值。:)
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)
接受的答案对我不起作用,也不遵循 MDN示例
请参阅上方链接中的“说明”部分
我会考虑以下对我有用的东西:
let stringThatIsGoingToChange = 'findMe';
let flagsYouWant = 'gi' //simple string with flags
let dynamicRegExp = new RegExp(`${stringThatIsGoingToChange}`, flagsYouWant)
// that makes dynamicRegExp = /findMe/gi
只需要先准备字符串变量,然后将其转换为RegEx。
例如:
您要向RegEx 添加minLength
并将MaxLength
其与变量:
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中更改。
希望有用。也对我的英语感到抱歉。