用javascript替换双卷曲大括号

时间:2011-12-10 09:18:53

标签: javascript regex

我正在尝试将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>>"

我的剧本出了什么问题?

感谢您的帮助

2 个答案:

答案 0 :(得分:7)

[{{][{]完全相同,与正则表达式中的{相同。方括号表示与该类中任何一个字符匹配的字符类。你应该改变:

"[" + f + "]"

要:

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('{{', '<<');

答案 1 :(得分:4)

@PaulPRO是正确的,但在chrome中你可以使用replace:

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

返回

"<<hello>>"

您使用的是什么环境?