用逗号替换带点和点的逗号

时间:2014-07-25 20:17:24

标签: javascript regex

我正在尝试用点逗号和逗号替换所有点,并且想知道这样做的最佳做法是什么。如果我按顺序执行,那么步骤将相互覆盖。

例如: 1,234.56(替换逗号后) - > 1.234.56(替换点后) - > 1,234,56

这显然不是我想要的。

我猜的一个选项是分裂角色,然后使用相反的角色加入。是否有更容易/更好的方法来做到这一点?

5 个答案:

答案 0 :(得分: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 :(得分:11)

您可以执行以下操作:

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

Working Demo

答案 2 :(得分:3)

使用占位符文本分阶段执行:

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

答案 3 :(得分: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

答案 4 :(得分: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);