2011-12-10 115 views
3

我试图为原型的String对象有一个replaceWith功能,使我能够的情况下直接使用正则表达式替换替换双层大括号用JavaScript

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

当我测试我的代码在此字符串{{你好}}例如我发现,更换双大括号是一个问题

测试

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

这是马林指出,具有相同的功能String.prototype.replace除非你不需要添加g修饰符,并且在我看来,'{{Hello}}'.replace(/{{/g, '<<');对于其他编码器比'{{Hello}}'.replaceWith('{{', '<<');更简洁易懂。

+0

超级:)谢谢 – Marwan

+0

@ Marwan没问题:) – Paulpro

4

@PaulPRO是正确的,但在Chrome中你可以使用替换:

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

它返回

"<<hello>>" 

您正在使用什么JS环境?

+2

同样在每个其他浏览器支持'JavaScript 1.2'这是约99.9%的Javascript启用网页浏览器:) – Paulpro

+1

+1 @ JRideout感谢您的注释 – Marwan