如何在正则表达式中合并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';
答案 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')