用JavaScript替换字符串中的最后一个字符

3
我们如何替换字符串的最后一个字符?
SetCookie('pre_checkbox', "111111111111 11   ")
    checkbox_data1 = GetCookie('pre_checkbox');

    if(checkbox_data1[checkbox_data1.length-1]==" "){
         checkbox_data1[checkbox_data1.length-1]= '1';
         console.log(checkbox_data1+"after");

    }

out put on console : 111111111111 11   after

最后一个字符没有被替换为“1”,不知道为什么。

还尝试了:checkbox_data1=checkbox_data1.replace(checkbox_data1.charAt(checkbox_data1.length-1), "1");

有人能帮我解决吗?


5
字符串是不可变的。 - Rob W
1
@SujeshArukil:“这并不意味着你不能改变一个字符串”……?这正是不可变的含义。你可以分配一个不同的字符串,但你不能改变原来的字符串。而且JS除了在某些情况下(比如str += something)不会为你重新分配,因为像JS这样的按值传递的语言不会让被调用者随意更改调用者的变量。 - cHao
1
那是正确的。我所指的是,操作者想要替换一个字符。你得到的将是一个新字符串,而不是修改后的原始字符串。原始字符串无法更新,但可以创建一个值被替换的新字符串。 - Sujesh Arukil
1
如果您调用一个执行替换并返回新字符串的函数,或使用 + 创建带有附加字符的字符串,则可以将其分配给保存原始字符串的变量/属性,并且它看起来已更改。但是例如,str[0] ='x' 将不起作用;它只会静默失败,因为字符串的索引不可写。必须以另一种方式完成。 - cHao
没错。同意。 - Sujesh Arukil
显示剩余2条评论
6个回答

4
简单的正则表达式替换应该可以实现您想要的效果:
checkbox_data1 = checkbox_data1.replace(/.$/,1);

通用版本:

mystr = mystr.replace(/.$/,"replacement");

请记住,仅仅调用str.replace()并不会将更改应用于str,除非您执行str = str.replace() - 也就是说,将replace()函数的返回值应用回变量str


1
只是为了明确:解决问题的不是正则表达式,而是将“replace”的返回值分配给原始变量名。 - Rob W
@RobW 是的,我已经用最后一句话澄清了这个事实。 - MDEV
@SmokeyPHP...这个问题的扩展......比如说我想替换一个在中间位置的空格,比如第三个位置:"ab c d" ...我们该怎么做? - user2569524
@user2569524 str = str.replace(/^(..)./,'$1'+'replacement') 如果要替换第三个字符-- ^ 表示字符串的开头,. 表示任意字符,而 $1 则是将 (..) 中匹配到的两个字符放回字符串中。 - MDEV
1
@user2569524 抱歉刚注意到你指定了一个空格,之前的代码应该是 str = str.replace(/^(..) /,'$1'+'replacement') - MDEV

1
使用正则表达式...
var checkbox_data1 = '111111111111 11   ';
checkbox_data1.replace(/ $/,'$1');
console.log(checkbox_data1);

这将替换字符串中的最后一个空格。


0

正如Rob所说,字符串是不可变的。例如:

var str = "abc";
str[0] = "d";
console.log(str); // "abc" not "dbc"

你可以这样做:
var str = "111 ";
str = str.substr(0, str.length-1) + "1"; // this makes a _new_ string

注意,IE不支持使用substr函数处理负数。str.substr(0, -1)会返回空字符串""。(此外,substr并没有在ECMAScript中定义;它只是一个常见的补充功能。如果你想从0开始截取字符串,那么使用substring函数可以达到相同的效果,并且是标准化的方法。) - cHao

0

这也是一种方法,不需要使用正则表达式 :)

var string = '111111111111 11   ';
var tempstr = '';
if (string[string.length - 1] === ' ') {
    for (i = 0; i < string.length - 1; i += 1) {
        tempstr += string[i];
    }
    tempstr += '1';
}

你的意图是什么?abcdefghdesiredValues不是期望的结果。 - Halcyon
我猜他可以从当前的代码中得到期望的结果。 - sla55er
在 console.log 中,它显示 (string - 1) + '1'。我不知道你所说的 string+'1' 是什么意思。你可以记录这段代码并查看结果。 - sla55er
1
为什么要这样麻烦地一个个添加字符,当你可以直接说str = str.substring(0, str.length - 1) + '1'?阅读有关Schlemiel the Painter's Algorithm的内容。 - cHao

0

你在我们的字符串中有一些空间,请尝试使用它

checkbox_data1=checkbox_data1.replace(checkbox_data1.charAt(checkbox_data1.length-4), "1   ");

然后在中间添加空格

console.log(checkbox_data1+"   after");

0

你可以尝试这个方法,

var checkbox_data1=checkbox_data1.replace(checkbox_data1.slice(-1),"+");

这将用“+”替换您字符串的最后一个字符。


不完全正确。它将替换字符串最后一个字符的第一个实例。如果字符串是'11111111 111 ',那么将替换第一个空格(即字符串中的第9个字符)。 - cHao

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接