Javascript 使用正则表达式模式从字符串中提取特定数据
我有如下数据Javascript 使用正则表达式模式从字符串中提取特定数据,javascript,node.js,regex,Javascript,Node.js,Regex,我有如下数据 12xATG370g,12x720ml,1glas=0.97,1kg=2.03 versch。分拣机,2 x 250克,1个包装=1-100克=0.40 2 x 950克,1包=4.98,1公斤=4.47,tiefgekühlt versch。分拣机,2 x 500克,1个包装=0.65,1千克=1。- 3,5%Fett,3 x 1升,1包=0.76,1升=0.60 Krönung Aroma ganze Kaffeebohnen的Krönung天平,500克,1公斤=6.44 v
12xATG370g,12x720ml,1glas=0.97,1kg=2.03
versch。分拣机,2 x 250克,1个包装=1-100克=0.40
2 x 950克,1包=4.98,1公斤=4.47,tiefgekühlt
versch。分拣机,2 x 500克,1个包装=0.65,1千克=1。-
3,5%Fett,3 x 1升,1包=0.76,1升=0.60
Krönung Aroma ganze Kaffeebohnen的Krönung天平,500克,1公斤=6.44
versch。分拣机,400克,1千克=5.60
400g,versch。分拣机,1千克=5.60
12x720ml=>{包装:12,重量:720,单位:ml}
2x250克=>{包装:2件,重量:250,单位:克}
2 x 950克=>{包装:2件,重量:950,单位:克}
2x500克=>{包装:2件,重量:500,单位:克}
3x1升=>{包装:3件,重量:1件,单位:升}
500克=>{包装:1件,重量:500,单位:克}
400g=>{包装:1件,重量:400,单位:g}
400g=>{包装:1件,重量:400,单位:g}
const re = /^(\d+x)?([\d,]+)([a-z]+)/gm;
str.split(",").forEach(v => {
const value = v.replace(/\s/g, "")
let arr = [...value.matchAll(re)];
console.log(arr[0]);
})
使用上述代码的输入字符串的结果
12xATG370g,12x720ml,1glas=0.97,1kg=2.03
versch。分拣机,2 x 250克,1个包装=1-100克=0.40
12xATG370g,12x720ml,1glas=0.97,1kg=2.03
versch。分拣机,2 x 250克,1个包装=1-100克=0.40
2 x 950克,1包=4.98,1公斤=4.47,tiefgekühlt
versch。分拣机,2 x 500克,1个包装=0.65,1千克=1。-
3,5%Fett,3 x 1升,1包=0.76,1升=0.60
Krönung Balance gemahlen Order Krönung Aroma ganze Kaffeebohnen,400-500克,1千克=6.44
(范围)versch。分拣机,400克,1千克=5.60
100-400g,versch。分拣机,1千克=5.60
(范围)12x720ml=>{pack:12,minweight:720,maxweight:0,unit:ml}
2x250克=>{包装:2,最小重量:250,最大重量:0,单位:克}
2 x 950克=>{包装:2,最小重量:950,最大重量:0,单位:克}
2x500克=>{pack:2,minweight:500,maxweight:0,unit:g}
3x1升=>{包装:3,最小重量:1,最大重量:0,单位:升}
400-500g=>{包装:1,最小重量:400,最大重量:500,单位:g}
400g=>{pack:1,minweight:400,maxweight:0,unit:g}
100-400g=>{包装:1,最小重量:100,最大重量:400,单位:g}
const arr=['12 x ATG 370 g,12 x 720 ml,1 Glas=0.97,1 kg=2.03','versch.Sorten,2 x 250 g,1 Packung=1.-,100 g=0.40','2 x 950 g,1 Packung=4.98,1 kg=4.47,tiefgekühlt','versch Sorten.Sorten,2 x 500 g,1 Packung=0.65,1 kg=1.-','3,5%费特,3 x 1升,1 Packung=0.76,1升=0.60','Krogenze-Genode-Krganung-Kaf'feebohnen,400-500克,1千克=6.44',“相对分拣机,400克,1千克=5.60',“100-400克,相对分拣机,1千克=5.60'”;
常数re=/(?:,\s*|^)(?:(\d+)\s*x\s*)?(\d+(?:\s*-\s*\d+)\s*([a-zA-Z]+)(?:$,)/;
arr.forEach(str=>{
让[u,包装,重量,单位]=str.匹配(re);
包装=包装| | 1;
log(str,{'pack':pack,'weight':weight,'unit':unit});
})
您的字符串中可以有多个有效的子字符串吗?类似于“1 x 1 mg,1000 l
”?为什么不使用两个单独的正则表达式?@PM77-1我非常怀疑,但目前我可以假设没有。请详细说明您的评论为什么不使用两个单独的正则表达式?
超级感谢。效果非常好。还有一个问题-请查看编辑后的问题(最后一节)@SaurabhKumar只需添加一个可选组,(?:\s*-\s*\d+)