使用正则表达式字符动态创建正则表达式

时间:2017-10-23 20:05:28

标签: javascript node.js regex

我想要匹配以下任何文件:

/foo/bar/baz/x
/foo/bar/baz/y/z

所以我创建一个像这样的正则表达式:

new RegExp('^/foo/bar/baz/.*')

但我的问题是 - 如何告诉RegExp构造函数将. *^视为正则表达式字符,而不是文字字符?

2 个答案:

答案 0 :(得分:1)

由于这是与node.js相关的,我的解决方案是使用quotemeta https://github.com/substack/quotemeta

好像它与perl相关,我的解决方案是使用\ Q \ E; - )

答案 1 :(得分:0)

new RegExp('^/foo/bar/baz/.*')

...和

/^\/foo\/bar\/baz\/.*/

......是等价的。 new RegExp字符串中的所有内容都被视为正则表达式字符,而不是文字字符(幸运的是/不需要转义)。

如果你想要使用构造函数语法创建一个文字字符,请确保使用双反斜杠,因为字符串文字中的\有其自己的含义。例如,如果要捕获文字.字符,请执行以下操作:

new RegExp('\.')

...不会正常工作,因为它与'.'的解释相同,使RegExp与/./相同。你需要这样做:

new RegExp('\\.')