将变量传递给JavaScript中的正则表达式

可能重复:
转义字符串在Javascript正则表达式中使用

我有这样的味精:

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

我有一个函数可以使用传递的参数来创建消息

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

问题是,它不能够采取帕拉姆i创造了reg进出口。

有什么办法实现这一点?


您的正则表达式是/{0}/gi因为您是通过字符串创建的。 这不是一个有效的表达。 你需要在正则表达式中转义{因为它在regexp语法中有特殊的含义,所以它应该是:

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

这是/{0}/gi 。 你需要逃避字符串中的转义


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

换句话说,不要查找“{0}”或“{1}”,只要查找围绕任意数字的{{[[0-9] +)}'(即{}),并传递一个函数到replace()函数可以根据{}之间的数字智能地替换这些表达式,这样可以使用RegExp文字,您可以将其写为/ {([0-9] +)} /而不是乱七八糟与字符串中的转义字符。

像这样的东西:

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

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

链接地址: http://www.djcxy.com/p/13401.html

上一篇: passing variable to a regexp in javascript

下一篇: Why is a matched substring returning "undefined" in JavaScript?