例如:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
但这当然是行不通的:) 有什么办法可以做到吗?
例如:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
但这当然是行不通的:) 有什么办法可以做到吗?
当前回答
你可以用以下两种方式之一在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的任何外观。
其他回答
要从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);
}
你可以使用RegExp对象:
var regexstring = "whatever";
var regexp = new RegExp(regexstring, "gi");
var str = "whateverTest";
var str2 = str.replace(regexp, "other");
document.write(str2);
然后,您可以以任何您想要的方式构造regexstring。
你可以在这里阅读更多信息。
这是一个非常无用的函数,它返回由特定字符包装的值。:)
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")
你可以用以下两种方式之一在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的任何外观。