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



假设我想匹配以下任何文件:

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

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

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

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

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

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

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

。和

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

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

如果确实要使用构造函数语法使某些内容成为文字字符,请确保使用双反斜杠,因为字符串文本中的都有自己的含义。例如,如果要捕获文字.字符,请执行以下操作:

new RegExp('.')

。无法正常工作,因为这被解释为与'.'相同,使正则表达式与/./相同。您需要改为执行以下操作:

new RegExp('\.')

最新更新