当前位置:  开发笔记 > 编程语言 > 正文

在javascript中将变量传递给regexp

如何解决《在javascript中将变量传递给regexp》经验,为你挑选了2个好方法。

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

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

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



1> artificialid..:

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

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

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



2> Jason S..:

我强烈建议您使用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

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有