我想在JavaScript中创建String.replaceAll()方法,我认为使用正则表达式是最简洁的方法。然而,我无法确定如何将变量传递给正则表达式。我已经可以这样做了,这将用“A”替换“B”的所有实例。

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

但我想这样做:

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

但显然,这只会替换文本“replaceThis”。。。那么如何将此变量传递到正则表达式字符串中?


当前回答

“ABABAB”替换(/B/g,“A”);

一如既往:除非迫不得已,否则不要使用正则表达式。对于简单的字符串替换,习惯用法是:

'ABABAB'.split('B').join('A')

这样,您就不必担心Gracenotes的回答中提到的引用问题。

其他回答

正如埃里克·温德林提到的,你可以这样做:

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

这会产生“正则表达式匹配”。然而,如果str1为“.”,则会失败。您可能希望结果是“模式匹配正则表达式”,将句点替换为“正则表达式”。但结果是。。。

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");

产生“模式匹配正则表达式”。

如果$1对您不起作用,您可以使用此选项:

var pattern = new RegExp("amman", "i");
"abc Amman efg".replace(pattern, "<b>" + "abc Amman efg".match(pattern)[0] + "</b>");

对于任何希望在匹配方法中使用变量的人来说,这对我很有用:

var alpha = 'fig';
'food fight'.match(alpha + 'ht')[0]; // fight

虽然您可以创建动态创建的RegExp(根据对这个问题的其他回答),但我会在类似的帖子中重复我的评论:String.replace()的函数形式非常有用,在许多情况下减少了对动态创建RegExp对象的需要。(这是一种痛苦,因为您必须将RegExp构造函数的输入表示为字符串,而不是使用斜杠/[a-Z]+/RegExp文本格式)

这些答案我都不清楚

简单的答案是:

var search_term = new RegExp(search_term, "g");
text = text.replace(search_term, replace_term);

例如:

$(“button”).click(函数){查找和替换(“Lorem”、“Chocolate”);查找和替换(“ipsum”,“冰淇淋”);});函数Find_andreplace(搜索_时间段,替换_时间段){text=$(“textbox”).html();var search_term=新RegExp(search_term,“g”);text=text.replace(搜索时间,替换时间);$(“textbox”).html(文本);}<script src=“https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js“></script><文本框>Lorem ipsum</textbox><button>单击我</button>