从字符串中解析数字并将它们推送到数组

时间:2014-06-26 20:17:48

标签: javascript string

所以我有这样的字符串:'5-2 7-1 8-9 7-4 1-3 1-0 2-8 8-0 6-9',它始终采用这种形式(数字,短划线,数字,空格,数字,短划线......)

我想要做的是将其转换为整数数组:[5,2,7,1,8,...,9] 我有这个解决方案

var str = '5-2 7-1 8-9 7-4 1-3 1-0 2-8 8-0 6-9';
numbers = str.replace('-', ' ').split(' ').map(function(entry) { return parseInt(entry); }); 
// ==> [ 5, 2, 7, 8, 7, 1, 1, 2, 8, 6 ] WTF!!

所以我选择了这个

var str = '5-2 7-1 8-9 7-4 1-3 1-0 2-8 8-0 6-9';
numbers = str.split(' ').join('').split('-').join('').split('').map(function(num) {
 return parseInt(num); 
}); // ==> [ 5, 2, 7, 1, 8, 9, 7, 4, 1, 3, 1, 0, 2, 8, 8, 0, 6, 9 ] All good!

但我不知道为什么第一个解决方案不起作用,我知道问题出在str.replace但是我无法弄清楚为什么会产生这个结果

3 个答案:

答案 0 :(得分:1)

replace方法默认只替换第一次出现。您需要使用正则表达式来替换所有这些:

var str = '5-2 7-1 8-9 7-4 1-3 1-0 2-8 8-0 6-9';
numbers = str.replace(/-/g, ' ').split(' ').map(function(entry) { 
//                       ^ The g flag makes the regex match all occurrences
    return parseInt(entry);
});

答案 1 :(得分:0)

.replace()仅替换第一次出现。使用正则表达式并进行全局替换 numbers = str.replace(/-/g, ' ')....

答案 2 :(得分:0)

这是一个jsfiddle:http://jsfiddle.net/uYKV6/10/

var str, strArr, regex;

str = '5-2 7-1 8-9 7-4 1-3 1-0 2-8 8-0 6-9';
regex = new RegExp("-", 'g');
str = str.replace(regex, " ");
strArr = str.split(" ");
console.log(strArr);