2015-12-12 2 views
14

У меня есть строка как "1,23,45,448.00", и я хочу заменить все запятые на десятичную точку и все десятичные точки по запятой.Замените, (запятая). (Точка) и. (Точка), (запятая)

Моя требуется выход "1.23.45.448,00"

Я пытался заменить , на . следующим образом:

var mystring = "1,23,45,448.00" 
alert(mystring.replace(/,/g , ".")); 

Но после этого, если я пытаюсь заменить . на , он также заменяет первый заменен . на , в результате дает выход в "1,23,45,448,00"

+0

Так? Что не работает для вас? –

+0

@AdamAzad При первом замене '.' (_or comma_) заставит другую замену заменить первую замену. – Tushar

+1

@Tushar, эти детали должны присутствовать в вопросе, а не в комментарии. Вопросы хорошего качества должны описывать проблему достаточно хорошо, без необходимости добавлять ** существенные ** к деталям проблемы в комментариях. Хороший поток описания состоит в том, чтобы сказать ** 1) что я хочу сделать ** тогда ** 2) что я делаю ** и, наконец, ** 3) что на самом деле происходит ** –

ответ

16

Использование replace с функцией обратного вызова, которая заменит , на . и . на ,. Возвращаемое значение из функции будет использоваться для замены согласованного значения.

var mystring = "1,23,45,448.00"; 
 

 
mystring = mystring.replace(/[,.]/g, function (m) { 
 
    // m is the match found in the string 
 
    // If `,` is matched return `.`, if `.` matched return `,` 
 
    return m === ',' ? '.' : ','; 
 
}); 
 

 
console.log(mystring); 
 
document.write(mystring);

Regex: Регулярное выражение [,.] будет соответствовать любому одному из запятой или десятичной точки.

String#replace() с функцией обратного вызова получит матч в качестве параметра (m), который является либо , или . и значение, которое возвращается из функции используется для замены матч.

Так что, когда первый , из строки сопоставляется

m = ','; 

И в функции return m === ',' ? '.' : ',';

эквивалентно, как

if (m === ',') { 
    return '.'; 
} else { 
    return ','; 
} 

Таким образом, в основном это замена , на . и . by , в строке.

+0

Не могли бы вы объяснить, что происходит в этой строке: 'return m === ','? ».':', '; ' – digglemister

+0

@snookieordie, см. [This] (http://stackoverflow.com/a/8897859/2151050) для будущего. –

+0

@snookieordie Когда m == ',' в это время он будет заменен на '.' другой мудрый ',' будет принят. '?' условный оператор. – RajeeshMenoth

3

Ничего плохого в подходе Tushar, но здесь нет еще одна идея:

myString 
    .replace(/,/g , "__COMMA__") // Replace `,` by some unique string 
    .replace(/\./g, ',')   // Replace `.` by `,` 
    .replace(/__COMMA__/g, '.'); // Replace the string by `.` 
Смежные вопросы