【问题标题】:JavaScript Replace issuesJavaScript 替换问题
【发布时间】:2009-07-22 18:41:25
【问题描述】:

我有一个具有 2 个属性的对象数组:键和值。我有一个文本块,其中包含与对象键相对应的占位符。我想用匹配键的对象中的相应值替换占位符。

我有以下代码:

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 下测试了该模式,它返回了所有以“[sub:KeyText]”形式出现的占位符实例。我还确保键和值正确返回。我还循环了生成的各种表达式,结果模式是准确的。

上面的代码导致text = text... 行出现“内存不足异常”如果我删除分配,什么都不会发生。

知道我在哪里做错了吗?

【问题讨论】:

  • #textblock 的内部 html 有多大?
  • 为什么在这种情况下使用正则表达式而不是简单替换?
  • 我认为 replace 只会替换一个实例,而不是全部。
  • 如果将每个迭代器替换为普通的 for 循环,还会发生这种情况吗?
  • @tj111 少于 2000 个字符。

标签: javascript regex


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • @EFraim 是的,但它仍然是一个 JavaScript 字符串,需要在转换为模式之前进行转义。
    • 在我转义字符串中的反斜杠以便模式将其视为单个反斜杠后,它解决了问题。
    • 您建议使用正则表达式进行单个替换全部?
    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2013-03-24
    相关资源
    最近更新 更多