.replace不能在for循环中工作吗?

时间:2016-03-03 19:47:18

标签: javascript

所以我试图制作一个“.replace”循环,但是发生了一些神秘的事情。

var cell = "r1c1";

for (i = 0; i <= 4; i++){
  cell = cell.replace(cell[3],i+1);

我的预期输出:

cell = "r1c1"
cell = "r1c2"
cell = "r1c3"
cell = "r1c4"
cell = "r1c5"

实际输出:

cell = "r1c2"
cell = "r2c1"
cell = "r2c3"
cell = "r2c4"
cell = "r2c5"

如您所见,它在第二次迭代时运行正常的EXCEPT。 世界上我做错了什么?

3 个答案:

答案 0 :(得分:5)

$timeout将替换它在字符串'r1c1'中找到的'1'字符的第一个实例。在这种情况下,位置1处的“1”被替换而不是位置3处的“1”。

要获得所需的结果,请尝试

cell.replace(cell[3], i+1)

答案 1 :(得分:0)

您可以使用正则表达式:/^r(\d+)c(\d+)/

var row_col = 'r1c1';
var match = /^r(\d+)c(\d+)/.exec(row_col);  // match string
var row = +match[1];  // extract row
var col = +match[2];  // extract column
// edit row and col as needed
row_col = 'r' + row + 'c' + col;  // "reassemble" string

这将处理比9更大的行/列数。如果不是这样,那么请阅读String.prototype.substring()

var row_col = 'r1c1';
var row = +row_col.substring(1,2);
var col = +row_col.substring(3,4)

答案 2 :(得分:-1)

我不喜欢这个,但最终使用的修复程序看起来像这样:

cell = "r"+(j)+cell.substr(2,2);

由于我不可避免地回答了我自己的问题,在这里,我仍然想要征求意见:

从长远来看,你认为像这样的解决方案有多优雅?