繁体   English   中英

将字符串拆分为浮点数和字符数组

[英]Splitting a string into an array of floats and characters

我们正在使用可以包含整数,浮点数和字符的字符串。

例:

.12A1.3B.5CD

我想把那个字符串变成一个数字和字符数组,看起来像

[.12,A,1.3,B,.5,C,0,D]

(当字母前没有数字时,假定为0)

我尝试了不同的正则表达式组合,却无法正常工作:

str.match(/[a-zA-Z]+?[0-9]*\.?[0-9]+/g)

但这给了我以下结果:

[“ 12”,“ A”,“ 1”,“ 3”,“ B”,“ 5”,“ CD”]

切掉小数点并且不将“ D”分隔为“ 0,D”

同样,期望的结果是[.12,A,1.3,B,.5,C,0,D]。

有什么猜想吗?

您可以替换丢失的零并匹配零件。 稍后在检查数字或字符串之后映射值。

 var string ='.12A1.3B.5CD', array = string .replace(/((^|[az])(?=\\.))|([az](?=[az]))/gi, '$&0') .match(/[.0-9]+|[az]/gi) .map(v => v == +v ? +v : v); console.log(array); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

您可以在每个字母之后添加零(如果后面紧跟另一个字母,然后按字母分割):

 var s = ".12A1.3B.5CD"; console.log( s.replace(/([az])(?=[az])/gi, "$1"+"0").split(/([az])/i).filter(x => x != "") ) 

使用String.match()Array.reduce()isNaN()函数:

 var s = '.12A1.3B.5CD', prev, result = s.match(/(\\d*\\.)?\\d+|[a-zA-Z]/g).reduce(function(a, v){ v = +v || v; if (a.length > 1 && +v !== v && isNaN(prev)) a.push(0); a.push(v); prev = v; return a; }, []); console.log(result) 

“速度”比较:

在此处输入图片说明

这应该可以解决问题:

str.match(\\([a-zA-Z]|[0-9]*\\.?[0-9]+)\\g)

然后使用javascript,您应该在连续字母之间的数组中插入0。

一个查看正则表达式的好网站: https : //regex101.com/r/vhnv2M/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM