我正在尝试用点逗号和逗号替换所有点,并且想知道这样做的最佳做法是什么。如果我按顺序执行,那么步骤将相互覆盖。
例如: 1,234.56(替换逗号后) - > 1.234.56(替换点后) - > 1,234,56
这显然不是我想要的。
我猜的一个选项是分裂角色,然后使用相反的角色加入。是否有更容易/更好的方法来做到这一点?
答案 0 :(得分:13)
您可以使用回调
"1,234.56".replace(/[.,]/g, function(x) {
return x == ',' ? '.' : ',';
});
如果您要替换两个以上的字符,可以使用地图创建便利功能来进行替换
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
答案 1 :(得分:11)
您可以执行以下操作:
var str = '1,234.56';
var map = {',':'.','.':','};
str = str.replace(/[,.]/g, function(k) {
return map[k];
});
答案 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);