如何在不需要转义所有内容的情况下进行全局字符串替换?

hug*_*omg 1 javascript regex

我想用另一个字符串替换字符串中所有出现的模式。例如,让我们将所有 "$" 转换为 "!":

"$$$" -> "!!!"
Run Code Online (Sandbox Code Playgroud)

普通 string.replace 仅替换第一个匹配项:

"$$$".replace("$", "!"); // gives "$!!"
Run Code Online (Sandbox Code Playgroud)

和正则表达式迫使我逃到特殊字符

"$$$".replace(/\$/g, "!"); // Pattern is now full of backslashes!
Run Code Online (Sandbox Code Playgroud)

是否可以进行全局替换而不必手动转义特殊字符?我有一堆模式是我代码的一部分,我认为如果不得不手动转义所有模式,可读性会受到影响。

我期待一种直接做我想要的东西的技巧,或者至少一种将字符串转换为可由以下人员使用的转义形式的方法 new RegExp

Mar*_*ers 5

Javascript 中没有标准的正则表达式转义函数。

您可以编写自己的(源代码)或从您的库中获取它(dojo 示例

function escape(s) {
    return s.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')
};
Run Code Online (Sandbox Code Playgroud)

这允许我们在运行时创建自定义正则表达式对象

function replace_all(string, pattern, replacement){
    return string.replace( new RegExp(escape(pattern), "g"), replacement);
}
Run Code Online (Sandbox Code Playgroud)