我编写了一个像低的函数:
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 > ?"
在这种情况下如何替换字符串。
答案 0 :(得分:0)
您应该在每次迭代的上一次搜索索引之后开始搜索
JavaScript没有接受replace
参数的start
方法,因此我通过找到"?"
的索引并使用substring
方法进行替换来完成此操作:
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;
答案 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(" ")