所以我有这样的字符串:'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
但是我无法弄清楚为什么会产生这个结果
答案 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);