具有Regex表达式的NodeJS变量

Jac*_* M. 3 node.js

如何find在正则表达式中包含变量?

var find = 'de';
var phrase = 'abcdefgh';
var replace = '45';

var newString = phrase.replace(/de/g, replace)
Run Code Online (Sandbox Code Playgroud)

即:var newString = phrase.replace(/ find/ g,replace)

预期: phrase = 'abc45fgh';

mon*_*ght 8

您可以使用 new RegExp()

var newString = phrase.replace(new RegExp(find, 'g'), replace);
Run Code Online (Sandbox Code Playgroud)


Pau*_*aul 4

Monkeyinsight 的答案很好,但还有一些你应该知道的事情。您需要小心,具体取决于find构造方式。假设你有类似的东西:

var name = 'Paul Oldridge (paulpro)';
var find = '/foo/(' + name + ')/bar';
Run Code Online (Sandbox Code Playgroud)

然后您需要决定是否要对正则表达式进行转义,以便它与字符串完全匹配/foo/Paul Oldridge (paulpro)/bar,或者是否希望它name作为正则表达式本身进行计算,在这种情况下(paulpro)将被视为捕获组并且它将与字符串匹配/foo/Paul Oldridge paulpro/bar没有括号paulpro

在许多情况下,您可能希望嵌入子表达式,但更常见的是您希望与给定的字符串完全匹配。在这种情况下,您可以转义 regex 的字符串。在 Node 中,您可以使用 npm 安装模块regex-quote。你可以像这样使用它:

var regexp_quote = require("regexp-quote");

var name = 'Paul Oldridge (paulpro)';
var find = '/foo/(' + regexp_quote( name ) + ')/bar';
Run Code Online (Sandbox Code Playgroud)

这将正确地转义括号,因此变为find

'/foo/(Paul Oldridge \(paulpro\))/bar'
Run Code Online (Sandbox Code Playgroud)

您可以将其传递给 RegExp 构造函数,如 Monkeyinsight 所示:

new RegExp(find, 'g')
Run Code Online (Sandbox Code Playgroud)