2011-12-07 25 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; 
}));