假设我想匹配以下任何文件:
/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('\.')