Javascript 将数字字符串(';两点三';解析为数字(';2.3';)

Javascript 将数字字符串(';两点三';解析为数字(';2.3';),javascript,math,Javascript,Math,我正在尝试将像“22”这样的数字字符串解析为“22”。我编写了一个函数,在某种程度上可以做到这一点,但在将像“2.3”这样的字符串解析为2.3时遇到了一些问题 当我找到一个数字,点跟随它向前看时,我是如何考虑这样做的,但目前我的函数忽略了点,并将2和3相加到5 您将如何将自然语言中的2.3或小数转换为由数字组成的字符串 以下是我的功能: function parseNumericString( str ){ var numbers = /\b(?:(one)|(two)|(three)|

我正在尝试将像“22”这样的数字字符串解析为“22”。我编写了一个函数,在某种程度上可以做到这一点,但在将像“2.3”这样的字符串解析为2.3时遇到了一些问题

当我找到一个数字,点跟随它向前看时,我是如何考虑这样做的,但目前我的函数忽略了点,并将2和3相加到5

您将如何将自然语言中的
2.3
或小数转换为由数字组成的字符串

以下是我的功能:

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;
}
函数parseNumericString(str){
(六)六(六)月(六)日(七);(七)七(七)月(七)日(九)日(九)九(九)日(九)日(九)日(九)日(九)日(九)日(九)甲(九)日(九)九(九)日(九)九(九)九(九)九)日(十)十(十)十(十二);(十二)十(十二)甲(十二)四(十二)款(十二)除(((:(:(:(:(:(:(:::::::::::(:(:(:(:(:(:(:(:(:(:(:(:(:(:(:(:(:(:(:(:(:(:(:(三)三)三)三)三)三)三)四)四)四)四)四)四(四)四(四)(四)四)四)四)四)四)四(四(四)(四)四)五)五)五)五)五)五)五)五)五)四(五)五)这是一个很好的例子,它的意思是:一百人一千人,一人,三人,四人,五人,七人,八人
,合计=0
,部分=0
,匹配,i,l,电源
;
while(match=numbers.exec(str)){

对于(i=0,l=match.length;ii如果您总是处理由空格分隔的字符串,另一个选项可能是按如下方式创建此函数:1.通过空格将字符串拆分为数组2.遍历数组并根据表/对象文本中的查找替换单词字符串,即用“.”替换“point”或用2替换“two”,或推到另一个array 3.将数组连接回字符串,4.parseInt base 10以创建数字在
'point'
处拆分字符串,并分别处理每个部分。@TedHopp我甚至没有想到这一点。所以使用符号和正则表达式进行拆分!谢谢!