替换字符串“a&lt;?AND b&gt;?”通过数组[1,2]为“a> 1且b <2”

时间:2015-08-13 04:40:46

标签: javascript

我编写了一个像低的函数:

str = "a < ? AND b > ?"
replace = [1, 2]
for(i = 0; i < replace.length; i++)
{
    str = str.replace("?", replace[i]);
}

按预期正确:"a > 1 AND b < 2"

但是当我尝试另一个声明时:replace = ["?", 2]

结果将是:"a < 2 AND b > ?"

在这种情况下如何替换字符串。

3 个答案:

答案 0 :(得分:0)

您应该在每次迭代的上一次搜索索引之后开始搜索 JavaScript没有接受replace参数的start方法,因此我通过找到"?"的索引并使用substring方法进行替换来完成此操作:

&#13;
&#13;
var str = "a < ? AND b > ?";
var replace = ["?", 2];
var index  = 0; 
for(i = 0; i < replace.length; i++)
{
    index = str.indexOf("?",index);
    str = str.substring(0,index) + replace[i] +  str.substring(index+1);
    index++;
}
alert(str);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您的数组中有两个元素。因此,您将调用replace方法两次(每次循环一次)。

在第一个例子中,这是发生的事情:

"a < ? AND b > ?" to  
"a < 1 AND b > ?" to
"a < 1 AND b > 2"

在示例中,您认为自己遇到了问题,就像这样:

"a < ? AND b > ?" to  
"a < ? AND b > ?" to HERE you are replacing a question mark with a question mark.
"a < 2 AND b > ?"

答案 2 :(得分:0)

我认为您应该将 str 拆分为 _array (_array of words),然后将此 _array 替换为 _replace (你的数组)。

示例:

str       = "a < ? AND b > ?"
_replace  = [1, 2]
_array    = str.plit(" ") //["a","<","?","AND","b",">","?"];
index     = 0
for(i = 0; i < _array.length; i++)
{
    if( replace[i] === "?" )
    {
        _array[i] = _replace[index]
        index++
    }
}
str = _array.join(" ")