2015-12-20 4 views
0

У меня есть строка, такие как 12 3 44 5 \n 7 88 Я хочу получить от строки только цифры и записать их в массив: [12,3,4,5,7,88]. Я хочу, чтобы это сделать ти RegExp:Получить только цифры из строки

var str='12 3 44 5 \n 7 88'; 
    alert(str); 
    var re =/^\S+$/; 
    var res=re.exec(str); 
    alert(res[0]); 
    alert(res[1]); 
    alert(res[2]); 

Но это не работает для меня.

+0

Возможный дубликат: http: //stackoverflow.com/questions/10003683/javascript-get-number-from-string – soorapadman

ответ

2

Правильный путь:

var str = '12 3 44 5 \n 7 88'; 
 
//if there matches, store them into the array, otherwise set 'numbers' to empty array 
 
var numbers = str.match(/\d+/g)?str.match(/\d+/g):[]; 
 
//to convert the strings to numbers 
 
for(var i=0;i<numbers.length;i++){ 
 
    numbers[i]=+numbers[i] 
 
} 
 
alert(numbers);

Почему? .match() просто проще использовать там. \d+ получает номер любой длины, флаг g возвращает все совпадения, а не только первое совпадение.

Если вы также хотите совместить поплавки, регулярное выражение будет /\d+([\.,]\d+)?/g. Он также будет соответствовать 42,12 или 42,12.

+0

За исключением этого возвращает массив строк, а не целых чисел. – Andy

+0

@ Энди в порядке, отредактирован. Это не имеет большого значения, хотя они могут быть преобразованы на лету ... – nicael

+2

Вы также можете сделать ['var numbers = str.match (/ \ d +/g) .map (Number);'] (https://jsfiddle.net/andyuws/46dofdev/). – Andy

1

Возможным alteranative

var s = '12 3 44 5 \n 7 88'; 
 
var numbers = s.split(/[^\d]+/).map(Number); 
 

 
document.getElementById('out').textContent = JSON.stringify(numbers); 
 
console.log(numbers);
<pre id="out"></pre>

С split вы никогда не будете иметь ситуацию, как где exec или match может быть null

Примечание: это не учитывает отрицательных чисел или с плавающей точкой или научными номерами и т. д. Пустая строка также будет производить [0], поэтому спецификация является ключевым.

Смежные вопросы