关于正则表达式:在javascript中将变量传递给正则表达式

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是/{0}/gi,因为您是从字符串创建的。它不是有效的表达式。您需要在regexp中转义,因为它在regexp语法中有特殊的含义,所以它应该是:

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

它是/\\{0\\}/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

看看这个类似的问题。

编辑:如果您想保留大于您的args列表长度的项目,请确保检查参数号:

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的转义字符串