【问题标题】:How to parse two space-delimited numbers with thousand separator?如何用千位分隔符解析两个以空格分隔的数字?
【发布时间】:2017-01-25 11:23:43
【问题描述】:

我需要解析包含两个数字的字符串,这可能是三种情况:

"646.60 25.10" => [646.60 25.10]

"1 395.86 13.50" => [1395.86, 13.50]

"13.50 1 783.69" => [13.50, 1 783.69]

在简单的情况下,使用 'number'.join(' ') 就足够了,但在某些情况下,像第二个和第三个那样有千位分隔符。

那么我怎样才能解析所有情况下的数字呢?

编辑:所有数字在数字的最后一段都有小数分隔符。

【问题讨论】:

  • 第三个例子正确吗?您说过它们是用空格分隔的,但在第三个示例中有一个 =>
  • "1 350 467" 是可能的输入值吗?或者您可以依靠某种小数点(无论是, 还是.)。如果"1 350 467" 是可能的输入,则该任务是不可能的。可能是[1350, 467],也可能是[1, 350467]
  • @T.J.克劳德我已经编辑了这篇文章,谢谢你的注意。不,这是不可能的价值,因为我有 . 的号码,即使是 12.00 号码
  • @Erik 是一位数字,总是被认为是一千,或者它可能只是那个数字?
  • @Mikelis Baltruks 可能只是数字。我也可能有2 980.0512 980.05 号码

标签: javascript string-parsing


【解决方案1】:

假设每个数字都以点位数字结尾(在您所说的 cmets 中),您可以使用它来定位正确的位置以使用正则表达式进行拆分。 这样,它对于任意数量的数字(尽管您指定只有两个)和数字中的任意数量的数字都是稳健和通用的,只要它以 digit-dot-digit-digit 结尾:

str1 = "4 435.89 1 333 456.90 7.54";

function splitToNumbers(str){
  arr = str.replace(/\s+/g,'').split(/(\d+.\d\d)/);
  //now clear the empty strings however you like
  arr.shift();
  arr.pop();
  arr = arr.join('&').split(/&+/);

 return arr;
}

console.log(splitToNumbers(str1));
//4435.89,1333456.90,7.54

【讨论】:

    【解决方案2】:

    var string1 = "646.60 25.10";// => [646.60 25.10]
    
    var string2 = "1 395.86 13,50";// => [1395.86, 13,50]
    
    var string3 = "13.50 1 783.69"; // => [13.50, 1 783.69]
    
    
    function getArray(s) {
    var index = s.indexOf(" ", s.indexOf("."));
    	return [s.substring(0,index), s.substring(index+1) ];
    }
    
    
    console.log(getArray(string1));
    console.log(getArray(string2));
    console.log(getArray(string3));

    【讨论】:

      猜你喜欢
      • 2014-11-27
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      相关资源
      最近更新 更多