2011-01-13 99 views
4

我想将看起来像正则表达式的字符串转换为正则表达式。Javascript:将字符串转换为正则表达式

我想这样做的原因是因为我动态构建了要在正则表达式中使用的关键字列表。例如,使用文件扩展名,我将提供我想包含在正则表达式中的可接受扩展名列表。

var extList = ['jpg','gif','jpg']; 

var exp = /^.*\.(extList)$/; 

感谢,任何帮助表示赞赏

回答

9

你会想用正则表达式的构造函数:

var extList = ['jpg','gif','jpg'];  
var reg = new RegExp('^.*\\.(' + extList.join('|') + ')$', 'i'); 

MDC - RegExp

+0

另一种方法可以使用eval(.. ),但创建Regexp对象是更好的解决方案。 – 2011-01-13 04:30:50

2
var extList = "jpg gif png".split(' '); 
var exp = new RegExp("\\.(?:"+extList.join("|")+")$", "i"); 

需要注意的是:

  • 您需要双击逃生反斜杠(曾经为字符串,一次是为正则表达式)
  • 您可以提供的标志,以正则表达式(如不区分大小写)作为字符串
  • 你不需要锚你的特定正则表达式的字符串的开始,对吧?
  • 我假设你不需要捕获什么扩展名,就把你的parens变成了一个非捕获组,(?:...)

哦,你原来的扩展名列表中包含 'JPG' 两次:)

1

可以使用RegExp对象:

var extList = ['jpg','gif','jpg']; 

var exp = new RegExp("^.*\\.(" + extList.join("|") + ")$"); 
相关问题