将变量传递给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?