用JavaScript替换双花括号

3

我正在尝试原型化String对象,使其具有replaceWith函数,以便我能够直接替换而无需使用正则表达式。

String.prototype.replaceWith = function(f, t) {
    var regExp = new RegExp("[" + f + "]", "g");
    return this.replace(regExp, t);
};

当我在这个字符串{{Hello}}中测试我的代码时,例如,我发现替换双大括号是一个问题。
测试
'{{Hello}}'.replaceWith('{{','<<').replaceWith('}}','>>');

结果是

 "<<<<Hello>>>>"

应该是

而不是


"<<Hello>>"

我的脚本出了什么问题?谢谢你的帮助。

看看能否找到现在可用的许多好的模板引擎的信息。 - Toby Allen
2个回答

7

[{{][{]完全相同,都等同于在正则表达式中使用{。方括号表示字符类,匹配该类别中的任何一个字符。您只需要更改:

"[" + f + "]"

To:

f

所以您有:

String.prototype.replaceWith = function(f, t) {
    var regExp = new RegExp(f, "g");
    return this.replace(regExp, t);
};

正如Marlin所指出的那样,它的功能与String.prototype.replace相同,只是您不需要添加g修饰符,而且在我看来,'{{Hello}}'.replace(/{{/g, '<<');'{{Hello}}'.replaceWith('{{', '<<');更简洁易懂。


4

@PaulPRO是正确的,但在Chrome浏览器中,您可以直接使用replace:

"{{hello}}".replace("}}",">>").replace("{{","<<")

返回结果

"<<hello>>"

你使用的是什么JavaScript环境?

2
同样,在支持JavaScript 1.2的其他浏览器中,大约有99.9%的启用了JavaScript的Web浏览器 :) - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接