Javascript 从包含特殊字符的字符串中提取数字

Javascript 从包含特殊字符的字符串中提取数字,javascript,regex,Javascript,Regex,我试图从字符串中提取十进制数,但问题是,假设字符串是$12.00,下面的函数能够提取12.00,但如果字符串是$12.00(包括美元符号),它会给我一个null的输出 我有这个功能: var overridedenvalue=process.argv[2]; 让数字牵引; if(overridedValue=='null'){ NumberTracted=''; } ExtractNumber(覆盖值,NumberTracted); 函数ExtractNumber(OverridedValue,

我试图从字符串中提取十进制数,但问题是,假设字符串
是$12.00
,下面的函数能够提取
12.00
,但如果字符串是
$12.00
(包括美元符号),它会给我一个
null
的输出

我有这个功能:

var overridedenvalue=process.argv[2];
让数字牵引;
if(overridedValue=='null'){
NumberTracted='';
}
ExtractNumber(覆盖值,NumberTracted);
函数ExtractNumber(OverridedValue,NumberTracted){
NumberTracted=OverridedValue.replace(/[^0-9\.]+/g,”);
//NumberExtracted=overridedvalue.replace(/\D/g,“”);
日志(“NumberTracted”,NumberTracted)
返回号被跟踪;
}
有人能帮忙吗?

那个?(不需要
+

const ExtractNumber=str=>str.replace(/[^0-9.]/g',)
log(ExtractNumber('Was$12.00'));

console.log(ExtractNumber('12.00'))
您可以使用以下表达式提取货币值:
/[\d]+\.[\d]+/g

const extractCurrencyValue=text=>
(([result])=>result?parseFloat(结果):未定义)
(text.match(/[\d]+\.[\d]+/g)| |[]);
const testCases=['Was$12.00','12.00','foo'];//12.00,12.00,未定义
forEach(testCase=>

log(extractCurrencyValue(testCase)?.toFixed(2))
如果您唯一遇到问题的两个特殊字符是
$
,请尝试以下正则表达式:

/\$?\d\.?/g

这将处理任何十进制数,包括
,其中包含或不包含
$
。如果要排除带有
$
的匹配项,只需将其从正则表达式中删除:

\$?


正则表达式没有任何问题,除了字符类中的点
\.
之前不必要的转义外,它不会影响结果(点在字符类中不充当匹配任何元字符的角色,并且不需要转义)

您可以说“如果字符串为$12.00,则输出为null”,但这是不可能的:
anyString.replace(/anyRegex/g,”)
可以生成
null
——但您没有显示示例输入和输出

我本想进一步评论,而不是“回答”,但无法在评论中说明以下内容。这两种方法产生相同的结果,并且都有效。当给定字符串
“$12.00”
时,两者都不会生成
null

/*
var overridedenvalue=process.argv[2];
让数字牵引;
if(overridedValue=='null'){
NumberTracted='';
}
*/
//一些测试数据
const test1=“12.00”;
const test2=“Was 12.00”;
const test3=“$12.00”;
const test4=“Was$12.00美元”;
//使用原始函数
log(“原始功能测试:”);
设result1=ExtractNumber(test1);
设result2=ExtractNumber(test2);
设result3=提取数(test3);
设result4=提取数(test4);
log(`test1:${test1}结果:${result1}`);
log(`test2:${test2}结果:${result2}`);
log(`test3:${test3}结果:${result3}`);
log(`test4:${test4}结果:${result4}`);
//使用精简版的函数
log(“Slim函数测试:”);
result1=getNumber(test1);
结果2=getNumber(测试2);
结果3=getNumber(测试3);
结果4=getNumber(测试4);
log(`test1:${test1}结果:${result1}`);
log(`test2:${test2}结果:${result2}`);
log(`test3:${test3}结果:${result3}`);
log(`test4:${test4}结果:${result4}`);
函数ExtractNumber(OverridedValue,NumberTracted){
NumberTracted=OverridedValue.replace(/[^0-9\.]+/g,”);
//NumberExtracted=overridedvalue.replace(/\D/g,“”);
日志(“NumberTracted”,NumberTracted)
返回号被跟踪;
}
//瘦身
函数getNumber(fromString){
返回fromString.replace(/[^0-9.]+/g,”);
}
“$12.00”。替换(/[^0-9.]+/g,”)
生成
12.00