将variables传递给javascript中的正则expression式

可能重复:
转义string在Javascript正则expression式中使用

我有这样的味精:

{1}允许的最大{0}个字符

我有一个函数来创build一个消息使用parameter passing为

for(var i = 0; i < agrs.length; i++){ reg = new RegExp('\{'+i+'\}', 'gi'); key = key.replace(reg,agrs[i]) } 

问题是它不能把参数i创build的reg exp。

有什么办法来达到这个目的?

您的正则expression式是/{0}/gi因为您是通过string创build的。 这不是一个有效的expression。 你需要在正则expression式中转义(因为它在regexp语法中有特殊的含义),所以它应该是:

 new RegExp('\\{'+i+'\\}', 'gi'); 

这是/\\{0\\}/gi 。 你需要逃避string中的转义\\

我强烈build议你使用String.replace()的函数forms来解决你的问题,而不是尝试在迭代{0},{1}等的for循环中参数化正则expression式。

换句话说,不要去查找“{0}”或“{1}”,只要查找围绕任意数字的{{[0-9] +)}(即{}},并传递一个函数到replace()函数智能地取代这些expression式之间的数字{}之间的这允许你使用RegExp文字,你可以写作/ {([0-9] +)} /而不是乱七八糟与string中的转义字符。

像这样的东西:

 s='the song says {0} little {1} little {2} little-endians'; args=['zero','one','two']; new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch) {return args[(+firstmatch)]; } ); 

这产生了

 the song says zero little one little two little-endians 

看到这个类似的问题 。

编辑:如果你想单独留下大于args列表长度的项目,请确保参数编号为:

 s='the song says {0} little {1} little {2} little-endians,\n'+ ' {3} little {4} little {5} little-endians'; args=['zero','one','two']; new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch) {var i = +firstmatch; return i < args.length ? args[i] : wholematch;} ); 

这产生了

 the song says zero little one little two little-endians, {3} little {4} little {5} little-endians 

我认为你的第二行应该是

 reg = new RegExp('\{'+i+'\}', 'gi'); 

但我不知道这是你唯一的问题。

 function escapeRegExp(str) { return str.replace(/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); } var re = new RegExp(escapeRegExp(str)); 

请参阅: 在Javascript正则expression式中使用的转义string