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;i 200.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
不在想要的输出中?而且,->
与➝代码>。这是故意的还是打字错误?这不是你想要的吗?你只想在最终数组中包含两个数字部分?是的,但除了这个箭头➝代码>我也面临着这个->
箭头,只是在非捕获组中交替使用->