Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript替换问题_Javascript_Regex - Fatal编程技术网

JavaScript替换问题

JavaScript替换问题,javascript,regex,Javascript,Regex,我有一个对象数组,它有两个属性:Key和Value。我有一个带有占位符的文本块,占位符对应于对象键。我想用具有匹配键的对象的相应值替换占位符 我有以下代码: function LoadReplacementData(replacementData) { var text = $("#textblock").html(); $.each(replacementData, function(index, item) { var expression = ne

我有一个对象数组,它有两个属性:Key和Value。我有一个带有占位符的文本块,占位符对应于对象键。我想用具有匹配键的对象的相应值替换占位符

我有以下代码:

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…
行出现“内存不足异常”。如果我删除赋值,则不会发生任何事情


你知道我做这个替换的错误在哪里吗?

我看到的第一件事是你没有摆脱你的反斜杠

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

我看到的第一件事是你没有摆脱你的反斜杠

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

使用联接和拆分来防止内存错误怎么样?它将显著节省内存开销,因为它不必使用正则表达式多次解析整个字符串,而只需使用标准字符串方法

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

使用联接和拆分来防止内存错误怎么样?它将显著节省内存开销,因为它不必使用正则表达式多次解析整个字符串,而只需使用标准字符串方法

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

#textblock
的内部html有多大?在这种情况下为什么使用正则表达式而不是简单替换?我认为替换只会替换一个实例,不是全部。如果用普通for循环替换每个迭代器,还会发生吗?@tj111少于2000个字符。
#textblock
的内部html有多大?在这种情况下为什么是正则表达式而不是简单替换?我想替换只会替换一个实例,不是全部。如果用普通for循环替换each迭代器,还会发生这种情况吗?@tj111少于2000个字符。@EFraim True,但它仍然是一个JavaScript字符串,需要在转换为模式之前进行转义。在我转义字符串中的反斜杠后,模式会将其视为单个反斜杠,它解决了这个问题。您建议使用正则表达式来表示单次替换所有?@EFraim True,但它仍然是一个JavaScript字符串,需要在转换为模式之前进行转义。在我转义了字符串中的反斜杠之后,模式会将其视为单次反斜杠,它解决了这个问题。你建议用一个正则表达式来代替所有的?