Как упоминал Эрик Венделин, вы можете сделать что-то вроде этого:
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");
получая "pattern matching regex"
.