JavaScript:将字符串转换为正则表达式

4

我希望将一个看起来像正则表达式的字符串转换成真正的正则表达式。

我这么做的原因是我正在动态构建一个关键词列表,以用于正则表达式。例如,对于文件扩展名,我会提供一个可接受的扩展名列表,我想要将它们包含在正则表达式中。

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

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

感谢,任何帮助都会受到赞赏。
3个回答

9
您需要使用RegExp构造函数:
var extList = ['jpg','gif','jpg'];    
var reg = new RegExp('^.*\\.(' + extList.join('|') + ')$', 'i');

MDC - RegExp


另一种方法是使用 eval(...),但创建 Regexp 对象是更好的解决方案。 - Sarwar Erfan
a) RegExp,而不是 Regexp; b) 你创建了 /^.*.(jpg|gif|jpg)$/(注意缺少反斜杠); c) 如果你不打算传递任何标志,第三个参数是可选的。 - Phrogz
我注意到这种方法不接受以斜杠开头和结尾的正则表达式,例如 "/^b/"。除了手动去掉斜杠之外,有没有其他方法来解决这个问题呢?(字符串来自用户输入)。 - Embedded_Mugs

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

请注意:
  • 你需要对反斜杠进行双重转义(一次用于字符串,一次用于正则表达式)
  • 你可以将标志作为字符串提供给正则表达式(例如不区分大小写)
  • 你不需要将特定的正则表达式锚定到字符串的开头,对吗?
  • 我将你的括号转换为非捕获组(?:...),假设你不需要捕获扩展名是什么。

哦,你原来的扩展名列表中有两个'jpg' :)


1
你可以使用 RegExp 对象:
var extList = ['jpg','gif','jpg'];

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接