2013-07-31 4 views
0

Как заменить последний символ строки?Замена последнего символа в строке javascript

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

Строки неизменяемы. –

+0

неизменный означает, что для измененной строки выделяется новая ячейка памяти. Не означает, что вы не можете изменить строку. –

+1

@SujeshArukil: «Не означает, что вы не можете изменить строку» ...? Это точно, какие непреложные средства. Вы можете назначить * другую * строку, но вы не можете изменить оригинал. И JS не будет выполнять переназначение для вас, кроме как в некоторых случаях (например, 'str + = something'), поскольку языки с перекрестным значением, такие как JS, не позволят вызываемому абоненту просто изменить и изменить переменные вызывающего. – cHao

ответ

1

Простой регулярное выражение замены должны делать то, что вы хотите :

checkbox_data1 = checkbox_data1.replace(/.$/,1); 

Общая редакция:

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

Помните, что просто звоню str.replace() не применяют изменения к str, если вы не сделаете str = str.replace() - то есть применить возвращаемое значение replace() функции возвращается к переменному str

+1

Просто для того, чтобы быть ясным: это не регулярное выражение, которое решает проблему, а назначение возвращаемого значения 'replace' для исходного имени переменной. –

+0

@RobW Да, я уточнил этот факт с окончательным предложением – SmokeyPHP

+0

@SmokeyPHP .. просто расширение этого вопроса ..... скажем, если я хочу заменить пространство, которое посередине, скажем, на третьей позиции, например: «ab cd» ... как мы это делаем? – user2569524

0

Как сказал Роб, строки являются неизменяемыми , Пример:

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 
+0

Примечание. IE не поддерживает отрицательные числа с' substr'. 'str.substr (0, -1)' дает мне '' ''. (Кроме того, в любом случае, 'substr' не определяется ECMAScript, это просто общее дополнение. Если вы собираетесь начинать с 0, то подстрока делает то же самое и стандартизируется.) – 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'; 
} 
+0

Что вы намерены сделать? 'abcdefghdesiredValues' не является желаемым результатом. – Halcyon

+0

Думаю, он может получить желаемый результат из текущего кода. – sla55er

+0

Отредактировано. Для желаемого результата благодаря @Frits van Campen – sla55er

1

использовать регулярное выражение ...

var checkbox_data1 = '111111111111 11 '; 
checkbox_data1.replace(/ $/,'$1'); 
console.log(checkbox_data1); 

Этот заменит последнее пространство в строке.

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),"+"); 

Это заменит последний характер вашей строки с помощью «+».

+0

Не совсем. Он заменит * первый экземпляр * последнего символа строки. Если строка '' 11111111 111 '', то будет заменено пространство * first * (то есть 9-й символ в строке). – cHao