具有Regex表达式的NodeJS变量

时间:2014-08-15 16:55:01

标签: node.js

如何在正则表达式中合并find变量?

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

var newString = phrase.replace(/de/g, replace)

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

预期:phrase = 'abc45fgh';

2 个答案:

答案 0 :(得分:7)

您可以使用new RegExp()

var newString = phrase.replace(new RegExp(find, 'g'), replace);

答案 1 :(得分:4)

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

var name = 'Paul Oldridge (paulpro)';
var find = '/foo/(' + name + ')/bar';

然后你需要决定是否要为正则表达式转义它,以便它与字符串/foo/Paul Oldridge (paulpro)/bar完全匹配,或者如果你希望它将name评估为正则表达式本身,在这种情况下(paulpro)将被视为一个捕获组,它将匹配字符串/foo/Paul Oldridge paulpro/bar,而paulpro周围没有括号。

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

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

var name = 'Paul Oldridge (paulpro)';
var find = '/foo/(' + regexp_quote( name ) + ')/bar';

哪个会正确地转义括号,以便find成为:

'/foo/(Paul Oldridge \(paulpro\))/bar'

并且你将它传递给Regins的构造函数,因为monkeyinsight显示:

new RegExp(find, 'g')