如何构建一个正则表达式,用'。'替换每个逗号。如果小于3位或小于3位,则为小数点。
即4,444是正确的并且保持不变但是3,33将是3.33或4,4444将是4.444
类似地,它可以像1,234,45,6789一样,它应该变成1,234.45.6789
答案 0 :(得分:1)
function commaToDot(number) {
let regex = /^\d{1,3}(?:\,\d{3})*((?:,\d+)+)*?$/;
let matches = number.match(regex);
if (matches[1]) {
number = number.replace(matches[1], matches[1].replace(/,/g, '.'))
}
return number;
}
console.log(commaToDot('4,4444'));
console.log(commaToDot('5,555'));
console.log(commaToDot('3,33'));
console.log(commaToDot('1,234,45,6789'));
console.log(commaToDot('1,234,45,678,9'));
console.log(commaToDot('5,5,5,5,5'));

这将匹配数字停止成为\d{1,3},\d{3}
模式一部分后的所有内容,并用点替换它们的逗号。
从我收集的内容来看,这就是你要找的东西。
修改强>
在上面留下我的评论以检查" 1,333.22,333"的有效性后,我不得不稍微重写正则表达式:
function commaToDot(number) {
let regex = /(?!,\d{3},)(,\d{0,2})|(,\d{4,})/g,
matches = number.match(regex);
if (matches) {
matches.forEach((match) => {
number = number.replace(match, match.replace(/,/g, '.'));
});
}
return number
}
console.log(commaToDot('1,234,45,678,9'));
console.log(commaToDot('4,4444'));
console.log(commaToDot('5,555'));
console.log(commaToDot('3,33'));
console.log(commaToDot('1,234,45,6789'));
console.log(commaToDot('5,5,5,5,5'));
console.log(commaToDot('12,345,678,90'));

现在应该按照您的意愿行事。
答案 1 :(得分:0)
使用RegExp.test()
函数和特定的正则表达式模式:
var commaToDot = function(str){
if (/^-?\d+[,\d]+\d+$/.test(str) && /\d+,(\d{1,2}|\d{4,})\b/.test(str)){
var parts = str.split(',');
return parts.length > 2? parts[0] +','+ parts.slice(1).join('.') : parts.join('.');
} else {
return str;
}
};
console.log(commaToDot('4,4444'));
console.log(commaToDot('5,555'));
console.log(commaToDot('3,33'));
console.log(commaToDot('1,234,45,6789'));