正则表达式用于计算昏迷后的字符数

时间:2017-12-14 10:56:15

标签: javascript regex

如何构建一个正则表达式,用'。'替换每个逗号。如果小于3位或小于3位,则为小数点。

即4,444是正确的并且保持不变但是3,33将是3.33或4,4444将是4.444

类似地,它可以像1,234,45,6789一样,它应该变成1,234.45.6789

2 个答案:

答案 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'));