Получить первые целые числа в строке с помощью JavaScript - PullRequest
32 голосов
/ 04 марта 2009

У меня есть строка в цикле, и для каждого цикла она заполнена текстами, которые выглядят так:

"123 hello everybody 4"
"4567 stuff is fun 67"
"12368 more stuff"

Я хочу получить только первые числа вплоть до текста в строке, и я, конечно, не знаю длины.

Заранее спасибо!

Ответы [ 5 ]

52 голосов
/ 04 марта 2009

Если число находится в начале строки:

("123 hello everybody 4").replace(/(^\d+)(.+$)/i,'$1'); //=> '123'

Если это где-то в строке:

(" hello 123 everybody 4").replace( /(^.+)(\w\d+\w)(.+$)/i,'$2'); //=> '123'

А для числа между символами:

("hello123everybody 4").replace( /(^.+\D)(\d+)(\D.+$)/i,'$2'); //=> '123'

[ приложение ]

Регулярное выражение для сопоставления всех чисел в строке:

"4567 stuff is fun4you 67".match(/^\d+|\d+\b|\d+(?=\w)/g); //=> ["4567", "4", "67"]

Вы можете отобразить полученный массив в массив Numbers:

"4567 stuff is fun4you 67"
  .match(/^\d+|\d+\b|\d+(?=\w)/g)
  .map(function (v) {return +v;}); //=> [4567, 4, 67]

Включая поплавки:

"4567 stuff is fun4you 2.12 67"
  .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g)
  .map(function (v) {return +v;}); //=> [4567, 4, 2.12, 67]

Если существует вероятность того, что строка не содержит никакого числа, используйте:

( "stuff is fun"
   .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || [] )
   .map(function (v) {return +v;}); //=> []

Итак, чтобы получить начальный или конечный номер строки 4567 stuff is fun4you 2.12 67"

// start number
var startingNumber = ( "4567 stuff is fun4you 2.12 67"
  .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || [] )
  .map(function (v) {return +v;}).shift(); //=> 4567

// end number
var endingNumber = ( "4567 stuff is fun4you 2.12 67"
  .match(/\d+\.\d+|\d+\b|\d+(?=\w)/g) || [] )
  .map(function (v) {return +v;}).pop(); //=> 67
44 голосов
/ 04 марта 2009
var str = "some text and 856 numbers 2";
var match = str.match(/\d+/);
document.writeln(parseInt(match[0], 10));

Если строки начинаются с цифры (может предшествовать пробел), достаточно простого parseInt(str, 10). parseInt пропустит первые пробелы.

10 необходимо, потому что в противном случае строка типа 08 будет преобразована в 0 (parseInt в большинстве реализаций рассматривает числа, начинающиеся с 0 как восьмеричные).

7 голосов
/ 04 марта 2009

Если вы хотите int, просто parseInt(myString, 10). (10 обозначает основание 10; в противном случае JavaScript может попытаться использовать другое основание, например 8 или 16.)

2 голосов
/ 04 марта 2009

Используйте регулярные выражения:

var re = new RegExp(/^\d+/); //starts with digit, one or more
var m = re.exec("4567 stuff is fun 67");
alert(m[0]); //4567

m = re.exec("stuff is fun 67");
alert(m); // null
1 голос
/ 17 января 2019

Это replace метод с простым регулярным выражением ([^\d].*):

'123 your 1st string'.replace( /[^\d].*/, '' );
// output: "123"

удалить все без первых цифр .

...