我有以下函数,但我的字符串从未被替换?我做错了什么?
function customRegex(){
return function(myString,replacement,myValue){
var s = myString;
var rgx = new RegExp("/("+replacement+")/,gi");
myString = myString.replace(rgx, myValue);
return myString;
}
}
var reg = customRegex();
console.log( reg("This is the worst!","worst","best"));
//This is always returning the original string?
最佳答案
正则表达式声明有问题。您似乎尝试添加正则表达式分隔符,但在构建动态模式时 RegExp
构造函数接受 string,因此,/
被视为字符串模式中的文字符号。正则表达式修饰符 gi
应作为第二个字符串参数传递。
使用
var rgx = new RegExp(replacement,"gi");
请参阅下面的演示:
function customRegex(){
return function(myString,replacement,myValue){
var s = myString;
var rgx = new RegExp(replacement,"gi");
myString = myString.replace(rgx, myValue);
return myString;
}
}
var reg = customRegex();
console.log( reg("This is the worst!","worst","best"));
此外,如果您的搜索模式可以包含特殊的正则表达式元字符,您将需要转义它们。请参阅Is there a RegExp.escape function in Javascript?所以线程。
关于Javascript正则表达式字符串替换不替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40382896/