我正在尝试将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>>"
我的剧本出了什么问题?
感谢您的帮助
答案 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>>"
您使用的是什么环境?