passing variable to a regexp in javascript
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Escape string for use in Javascript regex
我有这样一个消息:
Max {0} chars allowed in {1}
我有一个函数,可以使用传递给
1 2 3 4 | for(var i = 0; i < agrs.length; i++){ reg = new RegExp('\{'+i+'\}', 'gi'); key = key.replace(reg,agrs[i]) } |
问题是它不能使用PARAM EDCOX1×0来创建Reg Exp.
实现这一目标的方法是什么?
您的regexp是
1 | new RegExp('\\{'+i+'\\}', 'gi'); |
它是
我强烈建议您使用string.replace()的函数形式来解决您的问题,而不是尝试在迭代0、1等的for循环中参数化regexp。
换言之,与其找0或1,不如找([0-9]+)"(即围绕任意数字,并将函数传递给replace()函数,以便根据之间的数字智能地替换这些表达式。这样可以使用regexp文字,您可以将其写为/([0-9]+)/而不是将其混淆。h字符串中的转义字符。
像这样:
1 2 3 4 5 | 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)]; } ); |
其产量
1 | the song says zero little one little two little-endians |
看看这个类似的问题。
编辑:如果您想保留大于您的
1 2 3 4 5 6 7 | s='the song says {0} little {1} little {2} little-endians, '+ ' {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;} ); |
其产量
1 2 | the song says zero little one little two little-endians, {3} little {4} little {5} little-endians |
我想你的第二行应该是
1 | reg = new RegExp('\{'+i+'\}', 'gi'); |
但我不知道这是不是你唯一的问题。
1 2 3 4 5 | function escapeRegExp(str) { return str.replace(/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"); } var re = new RegExp(escapeRegExp(str)); |
请参见:用于javascript regex的转义字符串