如何在正则表达式中使用变量?

2022-08-29 21:58:06

我想在JavaScript中创建一个方法,我认为使用正则表达式将是最简洁的方法。但是,我无法弄清楚如何将变量传递给正则表达式。我已经可以这样做了,这将用.String.replaceAll()"B""A"

"ABABAB".replace(/B/g, "A");

但我想做这样的事情:

String.prototype.replaceAll = function(replaceThis, withThis) {
    this.replace(/replaceThis/g, withThis);
};

但显然这只会取代文本...那么我如何将此变量传递到我的正则表达式字符串中?"replaceThis"


答案 1

您可以构造一个新的 RegExp 对象,而不是使用语法:/regex\d/g

var replace = "regex\\d";
var re = new RegExp(replace,"g");

您可以通过这种方式动态创建正则表达式对象。然后,您将执行以下操作:

"mystring1".replace(re, "newstring");

答案 2

正如Eric Wendelin所提到的,你可以做这样的事情:

str1 = "pattern"
var re = new RegExp(str1, "g");
"pattern matching .".replace(re, "regex");

这将产生 .但是,如果 str1 是 ,它将失败。您期望结果是 ,将句点替换为 ,但结果会是..."regex matching ."".""pattern matching regex""regex"

regexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregex

这是因为,虽然是字符串,但在 RegExp 构造函数中,它仍然被解释为正则表达式,表示任何非换行符,表示字符串中的每个字符。为此,以下函数可能很有用:"."

 RegExp.quote = function(str) {
     return str.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
 };

然后你可以做:

str1 = "."
var re = new RegExp(RegExp.quote(str1), "g");
"pattern matching .".replace(re, "regex");

屈服。"pattern matching regex"