2014-07-25 305 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);