Javascript 解析用箭头分隔的数字

Javascript 解析用箭头分隔的数字,javascript,Javascript,我有以下输入数据[“$245.00➝ $200.48 ", "➝", 空,“,”$245.00➝ $200.48 ", "$247.00 ", "$210.00 ➝ “160.00欧元”、“210.00欧元->160.00美元”、“210.00英镑->160.00英镑”] 我想用箭头分割数据,然后通过数组返回数字 我尝试了以下方法: const data=[“$245.00➝ $200.48 ", "➝“,空,”,“$245.00➝ $200.48 ", "$247.00 ", "$

我有以下输入数据
[“$245.00➝ $200.48   ", "➝", 空,“,”$245.00➝ $200.48    ", "$247.00 ", "$210.00 ➝ “160.00欧元”、“210.00欧元->160.00美元”、“210.00英镑->160.00英镑”]

我想用箭头分割数据,然后通过数组返回数字

我尝试了以下方法:

const data=[“$245.00➝ $200.48	", "➝“,空,”,“$245.00➝ $200.48	", "$247.00	", "$210.00 ➝ €160.00	", "€210.00 -> $160.00	", "£210.00 -> £160.00	", ]
让getDigits=(numb)=>{
让数字=+numb.replace(/[^\d.]/g',);
返回数字
}
让hasNumber=(s)=>{
返回/\d/.test;
}
让拆分箭头=(s)=>{
如果(s===未定义的| | s===空| | s===“”| |!hasNumber(s)){
返回[]
}否则{
设arr=s.split('->')。join(',')。split('>')➝ ').连接(“,”)。拆分(“,”)
返回[getDigits(arr[0]),getDigits(arr[1])]
}
}
for(设i=0;i200.48*/
我将使用一个正则表达式来匹配
([\d.]+)➝ .*?([\d.]+)
(数字,后跟


const data=[“$245.00➝ $200.48	", "➝“,空,”,“$245.00➝ $200.48	", "$247.00	", "$210.00 ➝ €160.00	", "€210.00 -> $160.00	", "£210.00 -> £160.00	", ]
常量输出=data.map((项)=>{
如果(!item | | typeof item!=“string”){
返回[];
}
常量匹配=项匹配(/([\d.]+)(?:➝|->) \D*([\D.]+)/);
如果(!匹配){
返回[];
}
返回[匹配[1],匹配[2];
});

console.log(output);
一种方法是将
Array#map
Array#filter
组合起来,将输入数据转换为所需的输出格式,如下所述:

const data=[“$245.00➝ $200.48	", "➝“,空,”,“$245.00➝ $200.48	", "$247.00	", "$210.00 ➝ €160.00	", "€210.00 -> $160.00	", "£210.00 -> £160.00	", ]
常量结果=数据
.map(项目=>{
/*如果可能,将字符串转换为数字对,或返回空
排列*/
如果(项目类型==“字符串”){
/*从字符串和字符串中删除空格和货币符号
按数组方案分割结果*/
const parts=项目。替换(/[\s$€]*/g,,'')。拆分(/➝|->/)
如果(零件长度>1){
/*筛选有效字符串部分并解析为浮点
数字*/
返回parts.filter(part=>!!part).map(Number.parseFloat)
}      
}
返回[];
})

console.log(结果);
为什么
247、210和160
不在想要的输出中?而且,
->
。这是故意的还是打字错误?这不是你想要的吗?你只想在最终数组中包含两个数字部分?是的,但除了这个箭头
我也面临着这个
->
箭头,只是在非捕获组中交替使用
->