解析数字字符串('两点三'成数字(' 2.3')

时间:2014-09-24 00:13:59

标签: javascript math

我试图解析数字字符串,例如'二十二'进入' 22'。我写了一个函数,可以在某种程度上做到这一点,但我有一些问题解析类似于'两点三'到2.3。

我是如何想到这样做的,当我找到一个数字和点后面向前看时,但是目前我的函数忽略了点并将两个和三个加到了五个。

您如何将用自然语言编写的two point three或小数转换为由数字组成的字符串?

这是我的功能:

function parseNumericString( str ){
    var numbers = /\b(?:(one)|(two)|(three)|(four)|(five)|(six)|(seven)|(eight)|(nine)|(ten)|(eleven)|(twelve)|(?:(?:(thir)|(four)|(fif)|(six)|(seven)|(eigh)|(nine))teen)|(?:(?:(twen)|(thir)|(fou?r)|(fif)|(six)|(seven)|(eigh)|(nine))ty)|(hundred)|(thousand)|(?:(?:(mi)|(bi)|(tri)|(quadri)|(quinti)|(sexti)|(septi)|(octi)|(noni)|(deci))llion))\b/gi
    , total = 0
    ,  part = 0
    , match, i, l, power
    ;
    while( match = numbers.exec( str ) ){
        for( i=0, l=match.length; i<l; i++ ){
            if( !match[i] ){ continue; }
                 // 1-19
                 if( i<20 ){
                     part += i;

                     // 20, 30..90
                 }else if( i<28 ){
                      part += 10 + 10 * ( i-19 );
                      // hundred
                  }else if( i===28 ){
                      part *= 100;

                      // thousand-decillion               
                  }else{
                      var power = Math.pow( 1000, i-28 );

                      // e.g. million ... thousand
                     if( total > power ){
                         total += part * power;

                         // e.g. thousand ... million
                     }else{
                         total += part;
                         total *= power;
                     }

                     part = 0;
                 }
            }
        }

    return total+part;
}

0 个答案:

没有答案