正如Eric Wendelin提到的,你可以这样做:
str1 = "pattern"
var re = new RegExp(str1, "g");
"pattern matching .".replace(re, "regex");
这个产量
"regex matching ."
. 但是,如果str1是
"."
. 你会希望结果是
"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");
顺从的
“模式匹配正则表达式”
.