2011-12-07 58 views
3

我試圖設置我的頁面,以便用戶能夠鍵入像「25a89ss15s9 8 63」這樣的字符串,並提醒用戶「25,89,15,9, 8,63「,然後進一步提醒用戶」8,9,15,25,63,89「。所以我試圖從指定的字符串中分離整數,然後對它們進行排序。 關於如何將它們分成數組或其他東西的任何想法?我已經嘗試了幾個類似問題的例子,但它們似乎只能用一個整數。從Javascript中的字符串中提取多個整數

任何幫助,將不勝感激,謝謝。

+0

聽起來像一個工作,正則表達式 – Trevor

+0

謝謝你們這麼多!我很欣賞它,你幫我脫離了束縛! –

回答

7
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方法,傳遞一個函數作爲參數,對數組進行排序。

+0

注意:'list'將是一個數字字符串的數組,不是實際的整數 - 它不清楚OP想要什麼,但是你的帖子提到了「一組匹配的短語,在這種情況下是整數」,這對於什麼來說有點混亂實際結果是。 – jfriend00

+0

謝謝你和其他人!我很感激! –

+0

如果您正在尋找逗號分隔的字符串,請使用Array.prototype中的'join'。 'list.join(',');' – Trevor

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

試試這個:

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

要與數字的實際陣列結束了,我應該這樣做:

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

你需要一個兼容性補丁.map()available from MDN

請注意,這裏假定沒有小數點。

+1

+1對於符合ES5標準的環境,不錯的補充。 –

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; 
}));