Javascript 如何在无需转义所有内容的情况下进行全局字符串替换?
我想用另一个字符串替换字符串中所有出现的模式。例如,让我们将所有“$”转换为“!”:Javascript 如何在无需转义所有内容的情况下进行全局字符串替换?,javascript,regex,Javascript,Regex,我想用另一个字符串替换字符串中所有出现的模式。例如,让我们将所有“$”转换为“!”: 纯字符串.replace仅替换第一个匹配项: "$$$".replace("$", "!"); // gives "$!!" 正则表达式迫使我逃到特殊的字符 "$$$".replace(/\$/g, "!"); // Pattern is now full of backslashes! 是否可以在不必手动转义特殊字符的情况下进行全局替换?我有一堆模式是我代码的一部分,如果必须手动转义所有模式,我认为可读性
纯字符串.replace仅替换第一个匹配项:
"$$$".replace("$", "!"); // gives "$!!"
正则表达式迫使我逃到特殊的字符
"$$$".replace(/\$/g, "!"); // Pattern is now full of backslashes!
是否可以在不必手动转义特殊字符的情况下进行全局替换?我有一堆模式是我代码的一部分,如果必须手动转义所有模式,我认为可读性会受到影响
我希望有一个技巧可以直接实现我想要的功能,或者至少有一种方法可以将字符串转换为可由新RegExp
使用的可转换形式。请尝试以下方法:
function replaceAll(txt, replace, with_this) {
return txt.replace(new RegExp(replace, 'g'),with_this);
}
试试这个:
function replaceAll(txt, replace, with_this) {
return txt.replace(new RegExp(replace, 'g'),with_this);
}
您可以将regest作为字符串提供,并为所需的标志提供第三个参数
您可以将regest作为字符串提供,并为所需的标志提供第三个参数
Javascript中没有标准的regexp转义函数 您可以编写自己的()或从库()获取它
这允许我们在运行时创建自定义正则表达式对象
function replace_all(string, pattern, replacement){
return string.replace( new RegExp(escape(pattern), "g"), replacement);
}
Javascript中没有标准的regexp转义函数 您可以编写自己的()或从库()获取它
这允许我们在运行时创建自定义正则表达式对象
function replace_all(string, pattern, replacement){
return string.replace( new RegExp(escape(pattern), "g"), replacement);
}
“纯字符串。替换仅替换第一个匹配项”
在这种情况下,根据替换操作的效率,可以执行以下操作:
String.prototype.my_replace_all_simple = function(f, r) {
var newstr = "";
for (var i = 0; i < this.length; ++i) {
if (this[i] == f) {
newstr += r;
} else {
newstr += this[i];
}
}
return newstr;
};
比如说
但是,我只能使用马克建议的方法。“纯字符串。替换只替换第一个匹配”
在这种情况下,根据替换操作的效率,可以执行以下操作:
String.prototype.my_replace_all_simple = function(f, r) {
var newstr = "";
for (var i = 0; i < this.length; ++i) {
if (this[i] == f) {
newstr += r;
} else {
newstr += this[i];
}
}
return newstr;
};
比如说
但是,我只是使用马克建议的方式。遗憾的是,这只适用于Firefox(我应该在问题上提到这一点)遗憾的是,这只适用于Firefox(我应该在问题上提到这一点),这仍然迫使我使用
“\\\$”
进行替换。甚至更多的反斜杠!这仍然迫使我使用“\\$”
进行替换。甚至更多的反斜杠!当我有一个正则表达式引擎时,我不想重新实现简单的字符串匹配算法…:)当我有一个正则表达式引擎时,我不想重新实现简单的字符串匹配算法…:)
String.prototype.my_replace_all = function (f, r) {
if (this.length === 0 || f.length === 0) {
return this;
}
var substart = 0;
var end = this.length;
var newstr = "";
while (true) {
var subend = this.indexOf(f, substart);
if (subend === -1) subend = end;
newstr += this.substring(substart, subend);
if (subend === end) {
break;
}
newstr += r;
substart = subend + f.length;
}
return newstr;
};
// Adapted from C++ code that uses iterators.
// Might have converted it incorrectly though.