您的正则表达式是/{0}/gi
因为您从字符串创建它.它不是一个有效的表达方式.你需要在regexp中转义{因为它在regexp语法中有特殊含义,所以它应该是:
new RegExp('\\{'+i+'\\}', 'gi');
是的/\\{0\\}/gi
.你需要逃避\\
字符串中的转义.
您的正则表达式是/{0}/gi
因为您从字符串创建它.它不是一个有效的表达方式.你需要在regexp中转义{因为它在regexp语法中有特殊含义,所以它应该是:
new RegExp('\\{'+i+'\\}', 'gi');
是的/\\{0\\}/gi
.你需要逃避\\
字符串中的转义.
我强烈建议您使用String.replace()的函数形式来解决您的问题,而不是试图在迭代{0},{1}等的for循环中参数化regexp.
换句话说,不是寻找'{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