在Javascript中从字符串中提取多个整数

时间:2011-12-07 18:57:15

标签: javascript arrays sorting integer

我正在尝试设置我的页面,以便用户能够输入类似“25a89ss15s9 8 63”的字符串,并提醒用户“25,89,15,9,8,63”然后进一步提醒用户“8,9,15,25,63,89”。所以我试图将整数与指定的字符串分开,然后对它们进行排序。 关于如何将它们分成数组或关闭的任何想法?我尝试过类似问题的几个例子,但它们似乎只能用一个整数。

任何帮助都将不胜感激,谢谢。

5 个答案:

答案 0 :(得分:8)

var string = "25a89ss15s9 8 63"; // Input
var list = string.match(/\d+/g); // Get a list of all integers
list.sort(function(x,y){         // Sort list
    return x - y;
});
// At this point, you have a sorted list of all integers in a string.

此代码使用RegEx\d+表示:所有连续数字=整数,/g表示:选择所有出现次数)。 String.match()方法返回所有匹配短语的数组,在这种情况下为整数。

最后,调用Array.sort方法,将函数作为参数传递,对数组进行排序。

答案 1 :(得分:2)

您可以使用正则表达式解析所有数字:

/\d+/g

(一个或多个数字,而g表示“所有出现的数字”)

然后你可以对它们进行排序,但要确保你使用自定义函数来避免词典排序(这是默认的):

var numbers = "25a89ss15s9 8 63".match(/\d+/g).sort(function(a, b) {return a - b});

您可以这样发出警告:

alert("The numbers are: " + numbers.join(", "));

答案 2 :(得分:2)

试试这个:

var s = "25a89ss15s9 8 63";
var xs = s.match(/\d+/g); // => ["25", "89", "15", "9", "8", "63"]
xs.sort(function(x,y) { return x - y; });
xs.join(", "); // => "8, 9, 15, 25, 63, 89"

答案 3 :(得分:2)

为了得到一个实际的数字数组,我会这样做:

var str = "25a89ss15s9 8 63", 
    arr = str.match(/\d+/g)
             .map(Number)
             .sort(function(a,b){ return a-b; });

您需要.map() available from MDN的兼容性补丁。

请注意,这假设没有小数点。

答案 4 :(得分:1)

以下是线性搜索版本:

var isNumber = false;

var number = "";
var string = "25a89ss15s9 8 63";

var numbers = [];

for (var i = 0; i <= string.length; ++i) {
    var c = string.charAt(i);
    if (c > '/' && c < ':') {
        number += c;
        isNumber = true;
    } else {
        isNumber = false;
    }

    if (!isNumber) {
        if (number != "") {
            numbers.push(number);
        } 
        number = "";
    }
}

// Non sorted array
alert(numbers);

// Sorted Array
alert(numbers.sort(function(x, y) {
    return x - y;
}));