例如:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
但这当然行不通:) 有没有办法做到这一点?
例如:
function(input){
var testVar = input;
string = ...
string.replace(/ReGeX + testVar + ReGeX/, "replacement")
}
但这当然行不通:) 有没有办法做到这一点?
const regex = new RegExp(`ReGeX${testVar}ReGeX`);
...
string.replace(regex, "replacement");
每一些评论,但你可能要很注意重要逃脱的变量,如果有恶意内容的潜在(例如变量来自于用户输入)
在 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
is 已为正则表达式正确转义。如果您正在处理用户输入,或者只是想让匹配特殊字符更方便,则需要转义特殊字符:
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);
}
您可以通过以下两种方式之一在 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
。
如果您使用 es6模板文字是一种选择...
string.replace(new RegExp(`ReGeX${testVar}ReGeX`), "replacement")