Получить первые целые числа в строке с помощью JavaScript
-
03-07-2019 - |
Вопрос
У меня есть строка в цикле, и для каждого цикла она заполнена текстами, которые выглядят так:
"123 hello everybody 4"
"4567 stuff is fun 67"
"12368 more stuff"
Я хочу получить только первые числа вплоть до текста в строке, и я, конечно, не знаю длины.
Заранее спасибо!
Решение
Если число находится в начале строки:
("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, это 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
Другие советы
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
, как восьмеричные).
Если вам нужен int, просто parseInt (myString, 10)
. ( 10
обозначает базу 10; в противном случае JavaScript может попытаться использовать другую базу, например 8 или 16.)
Используйте регулярные выражения:
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
Этот заменяет
на простое регулярное выражение ( [^ \ d]. *
): р>
'123 your 1st string'.replace( /[^\d].*/, '' );
// output: "123"
удалить все без первых цифр .