2009-07-22 74 views
0

我有一个具有2个属性的对象数组:键和值。我有一个带有与对象Keys相对应的占位符的文本块。我想用对应的键替换占位符与对象的相应值。JavaScript替换问题

我有以下代码:

function LoadReplacementData(replacementData) 
{ 
    var text = $("#textblock").html(); 

    $.each(replacementData, function(index, item) 
    { 
     var expression = new RegExp("\[sub:" + item.Key + "\]", "g"); 
     text = text.replace(expression, item.Value); 
    }); 

    $("#textblock").html(text); 
} 

我在RegExLib.com下的JavaScript测试图案上,并与它们在“[子的形式中的占位符的所有实例回来:KeyText ]”。我还确保了键和值能够正确回归。我也遍历了生成的各种表达式,并且生成的模式是准确的。

上述代码导致text = text...行出现“内存不足异常”如果我删除了该赋值,则不会发生任何操作。

任何想法,我错了做这个替换?

+0

`#textblock`的内部html有多大? – tj111 2009-07-22 18:49:37

+0

如果用普通的for循环替换每个迭代器,它还会发生吗? – 2009-07-22 18:56:57

回答

0

我看到的第一件事就是你没有逃避你的反斜杠。

var expression = new RegExp("\\[sub:" + item.Key + "\\]", "g"); 
3

如何使用join和split来防止内存错误?它将显着节省内存开销,因为它不必使用正则表达式多次分析整个字符串,而只需使用标准字符串方法。

text = text.split("[sub:"+item.Key+"]").join(item.Value)