我试图解析数字字符串,例如'二十二'进入' 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;
}