带有Regexexpression式的NodeJSvariables
如何在一个正则expression式中包含find
variables?
var find = 'de'; var phrase = 'abcdefgh'; var replace = '45'; var newString = phrase.replace(/de/g, replace)
即: var newString = phrase.replace(/ find
/ g,replace)
预期: phrase = 'abc45fgh';
monkeyinsight的回答很好,但是还有别的你应该知道的。 你需要小心,取决于如何构build。 假设你有这样的东西:
var name = 'Paul Oldridge (paulpro)'; var find = '/foo/(' + name + ')/bar';
然后,您需要决定是否要为正则expression式转义它,以便它完全匹配string/foo/Paul Oldridge (paulpro)/bar
或者如果您希望它作为正则expression式本身计算name
,在这种情况下(paulpro)
将被视为一个捕获组,它将匹配string/foo/Paul Oldridge paulpro/bar
而不包括paulpro
的括号。
在很多情况下,你可能想要embedded一个子expression式,但是更常见的情况是你想要完全按照给定的方式匹配string。 在这种情况下,你可以逃避正则expression式的string 。 在节点中,您可以使用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'
您可以像monkeyinsight所显示的那样将其传递给RegExp的构造函数:
new RegExp(find, 'g')
您可以使用new RegExp()
var newString = phrase.replace(new RegExp(find, 'g'), replace);