Извлечение нескольких целых чисел из строки в Javascript - PullRequest
3 голосов
/ 07 декабря 2011

Я пытаюсь настроить свою страницу таким образом, чтобы пользователь мог ввести строку типа «25a89ss15s9 8 63», и он предупреждает пользователя «25, 89, 15, 9, 8, 63», а затем выдает дополнительные предупреждения пользователь "8, 9, 15, 25, 63, 89". Поэтому я пытаюсь отделить целые числа от указанной строки, а затем отсортировать их. Любые идеи о том, как я бы разделить их на массив или что-то близкое? Я пробовал несколько примеров из похожих вопросов, но, похоже, они работают только с одним целым числом.

Любая помощь будет оценена, спасибо.

Ответы [ 5 ]

8 голосов
/ 07 декабря 2011
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, передавая функцию в качестве аргумента, который сортирует массив.

2 голосов
/ 07 декабря 2011

Чтобы получить реальный массив чисел, я бы сделал следующее:

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

Вам понадобится патч совместимости для .map() , доступный из MDN .

Обратите внимание, что здесь не предполагается десятичных знаков.

2 голосов
/ 07 декабря 2011

Попробуйте это:

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"
2 голосов
/ 07 декабря 2011

Вы можете использовать регулярное выражение для анализа всех чисел:

/\d+/g

(одно или несколько чисел, а g означает «все случаи»)

Затем вы можете отсортироватьих, но убедитесь, что вы используете пользовательскую функцию, чтобы избежать лексикографической сортировки (которая используется по умолчанию):

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

Вы можете сделать следующее предупреждение:

alert("The numbers are: " + numbers.join(", "));
1 голос
/ 07 декабря 2011

Вот версия линейного поиска:

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;
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...