所以我试图制作一个“.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。 世界上我做错了什么?
答案 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);
由于我不可避免地回答了我自己的问题,在这里,我仍然想要征求意见:
从长远来看,你认为像这样的解决方案有多优雅?