将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