2014-07-25 193 views
6

我想用逗號和逗號替換點的所有點,並且想知道做這件事的最佳做法是什麼。如果我按順序執行,那麼這些步驟將相互覆蓋。用逗號替換逗號和點用逗號

例如: 1,234.56(更換之後的逗號) - > 1.234.56(更換點後) - > 1,234,56

這顯然不是我想要的。

我猜想一個選項是分割字符,然後使用相反的字符加入。有沒有更容易/更好的方法來做到這一點?

+0

請舉個例子與之合作。 – erosman

+0

你是什麼意思?一個例子就是將1,234.56改爲1.234,56? –

+0

我看到...我不確定你是如何想要它最終...無論如何,它似乎你已經得到了答案:) – erosman

回答

13

你可以使用一個回調

"1,234.56".replace(/[.,]/g, function(x) { 
    return x == ',' ? '.' : ','; 
}); 

FIDDLE

如果你打算更換兩個以上的字符,你可以使用地圖來完成替換操作創建一個方便的功能

function swap(str, swaps) { 
    var reg = new RegExp('['+Object.keys(swaps).join('')+']','g'); 
    return str.replace(reg, function(x) { return swaps[x] }); 
} 

var map = { 
    '.':',', 
    ',':'.' 
} 

var result = swap("1,234.56", map); // 1.234,56 

FIDDLE

+1

好的回調。 +1 –

+1

完全真棒! – Zevan

+2

+1。但不是:'/(\。|,)/ g',我只是使用'/[.,]] g'來消除不必要的替換和捕獲組。 – ridgerunner

3

做到這一點使用佔位符文本階段:

var foo = '1,234.56'; 
foo = foo 
    .replace(',', '~comma~') 
    .replace('.', '~dot~') 
    .replace('~comma~', '.') 
    .replace('~dot~', ',') 
+0

@ adeneo的答案實際上更好。 –

11

你可以做到以下幾點:

var str = '1,234.56'; 
var map = {',':'.','.':','}; 
str = str.replace(/[,.]/g, function(k) { 
    return map[k]; 
}); 

Working Demo

+1

不錯!我一直在建議按照@ adeneo的回答建議回調,但使用一個對象來匹配替換更容易。 – Adam

+1

這真的很不錯:D – Zevan

+0

如果你真的想讓它容易構建出來,你可以創建一個函數來接受一個字符串和一個地圖,並動態地生成正則表達式,就像這樣 - > ** http:// jsfiddle。淨/ 7rf6C/1/**。如果你必須硬編碼正則表達式,一張地圖確實沒有任何意義。 – adeneo

2

你可以使用一個for循環。喜歡的東西:

var txt = document.getElementById("txt"); 
var newStr = ""; 
for (var i = 0; i < txt.innerHTML.length; i++){ 
    var char = txt.innerHTML.charAt(i); 
    if (char == "."){ 
     char = ","; 
    }else if (char == ","){ 
     char = "."; 
    } 
    newStr += char; 
} 
txt.innerHTML = newStr; 

這裏有一個小提琴: http://jsfiddle.net/AyLQt/1/

不得不說雖然,@ adenoeo的答案是方式更光滑:d

0

在javascript中您可以使用

var value = '1.000.000,55'; 
var splitValue = value.split('.'); 
for (var i = 0; i < splitValue.length; i++) { 
    var valPart = splitValue[i]; 
    var newValPart = valPart.replace(',', '.'); 
    splitValue[i] = newValPart; 
} 
var newValue = splitValue.join(','); 
console.log(newValue);