可能重复:
用于Javascript正则表达式的转义字符串
我有这样的消息:
{1}允许最多{0}个字符
我有一个函数来使用传递的参数创建一个消息
for(var i = 0; i < agrs.length; i++){
reg = new RegExp('\{'+i+'\}', 'gi');
key = key.replace(reg,agrs[i])
}
Run Code Online (Sandbox Code Playgroud)
问题是它无法使用参数i创建reg exp.
有什么办法实现这个目标?
art*_*iot 56
您的正则表达式是/{0}/gi因为您从字符串创建它.它不是一个有效的表达方式.你需要在regexp中转义{因为它在regexp语法中有特殊含义,所以它应该是:
new RegExp('\\{'+i+'\\}', 'gi');
Run Code Online (Sandbox Code Playgroud)
是的/\\{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)]; }
);
Run Code Online (Sandbox Code Playgroud)
产量
the song says zero little one little two little-endians
Run Code Online (Sandbox Code Playgroud)
看到这个类似的问题.
编辑:如果您想单独留下大于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;}
);
Run Code Online (Sandbox Code Playgroud)
产量
the song says zero little one little two little-endians,
{3} little {4} little {5} little-endians
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45840 次 |
| 最近记录: |