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

时间:2017-09-27 19:26:23

标签: javascript arrays regex

我们正在处理一个包含整数,浮点数和字符的字符串。

示例:

  

.12A1.3B.5CD

我想把这个字符串转换成一个数字和字符数组,看起来像

  

[12中,A,1.3,B,0.5,C,0,d]

(如果字母前面没有数字,则假定为0)

我尝试了不同的正则表达式组合,并且无法像以下一样工作:

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

但它给了我结果:

  

[" 12"," A"," 1"," 3"," B",& #34; 5"," CD"]

砍掉小数点而不是分开" D"到" 0,D"

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

任何猜测?

4 个答案:

答案 0 :(得分:4)

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



var string ='.12A1.3B.5CD',
    array = string
        .replace(/((^|[a-z])(?=\.))|([a-z](?=[a-z]))/gi, '$&0')
        .match(/[.0-9]+|[a-z]/gi)
        .map(v => v == +v ? +v : v);

console.log(array);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:3)

如果后面跟着另一个字母,则可以在每个字母后面添加一个零,然后在字母上分割:



var s = ".12A1.3B.5CD";

console.log(
  s.replace(/([a-z])(?=[a-z])/gi, "$1"+"0").split(/([a-z])/i).filter(x => x != "")
)




答案 2 :(得分:1)

使用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)

“速度”比较:

enter image description here

答案 3 :(得分:0)

这应该可以解决问题:

for i in range(6): for j in range(i): card = random.choice(deck) deck.remove(card) print (card)

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

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