为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

我想String.replaceAll()在JavaScript中创建一个方法,我认为使用正则表达式将是最简洁的方法。但是,我无法弄清楚如何将变量传递给正则表达式。我能做到这一点已经将取代所有的实例"B"有"A"。"ABABAB".replace(/B/g, "A");但我想做这样的事情:String.prototype.replaceAll = function(replaceThis, withThis) {     this.replace(/replaceThis/g, withThis);};但显然这只会替换文本"replaceThis"...所以如何将此变量传递给我的正则表达式字符串?
查看完整描述

3 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

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

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

您可以通过这种方式动态创建正则表达式对象。然后你会做:

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


查看完整回答
反对 回复 2019-05-23
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

正如Eric Wendelin所说,你可以这样做:

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

这产生了"regex matching ."。但是,如果str1是,它将失败"."。你期望得到的结果"pattern matching regex",取代期间"regex",但结果是......

regexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregexregex

这是因为,尽管"."是一个String,但在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"


查看完整回答
反对 回复 2019-05-23
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

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

一如既往:除非必须,否则不要使用正则表达式。对于简单的字符串替换,成语是:

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

那么你不必担心Gracenotes答案中提到的引用问题。


查看完整回答
反对 回复 2019-05-23
  • 3 回答
  • 0 关注
  • 3003 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信