Подтвердить что ты не робот

Regex с использованием javascript для возврата только числа

Если бы у меня была строка типа "что-то12" или "что-то 102", как бы я использовал регулярное выражение в javascript, чтобы вернуть только части числа?

4b9b3361

Ответ 1

Регулярные выражения:

var numberPattern = /\d+/g;

'something102asdfkj1948948'.match( numberPattern )

Это вернет объект с двумя элементами внутри "102" и "1948948". Действуйте по своему усмотрению. Если он не соответствует ни одному, он вернет null.

Предполагая, что вы не имеете дело со сложными десятичными знаками, этого должно быть достаточно.

Ответ 2

Вы также можете удалить все нецифровые символы (\D или [^0-9]):

let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');

console.log(word_Without_Numbers)

Ответ 3

Для числа с десятичной дробью и знаком минус я использую этот фрагмент:

 var NUMERIC_REGEXP = /[-]{0,1}[\d]*[\.]{0,1}[\d]+/g;

'2.2px 3.1px 4px -7.6px obj.key'.match(NUMERIC_REGEXP)
// return ["2.2", "3.1", "4", "-7.6"]

Обновление: - 9/9/2018

Нашел инструмент, позволяющий визуально редактировать регулярные выражения: JavaScript Regular Expression Parser & Visualizer.

Обновить:

Вот еще один, с помощью которого вы можете даже отладчик регулярных выражений: онлайн тестер регулярных выражений и отладчик.

Обновить:

Еще один: RegExr.

Обновить:

Regexper и Regex Pal.

Ответ 4

Если вам нужны только цифры:

var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714

Теперь вы получаете цифры, соединенные

Ответ 5

Я думаю, вы хотите получить число из строки. В этом случае вы можете использовать следующее:

// Returns an array of numbers located in the string
function get_numbers(input) {
    return input.match(/[0-9]+/g);
}

var first_test = get_numbers('something102');
var second_test = get_numbers('something102or12');
var third_test = get_numbers('no numbers here!');

alert(first_test); // [102]
alert(second_test); // [102,12]
alert(third_test); // null

Ответ 6

Ответы не соответствуют вашему вопросу, что подразумевает конечное число. Кроме того, помните, что вы возвращаете строку; если вам действительно нужен номер, введите результат:

item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);

Если вы имеете дело с числовыми идентификаторами элементов на веб-странице, ваш код также может с пользой принять Element, извлекая номер из его id (или его первого родителя с id); если у вас есть Event, вы также можете получить Element от этого.

Ответ 7

var result = input.match(/\d+/g).join([])

Ответ 8

IMO ответ № 3 в этот раз от Chen Dachao - правильный путь, если вы хотите захватить любое число, но регулярное выражение можно сократить с:

/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g

чтобы:

/-?\d*\.?\d+/g

Например, этот код:

"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)

генерирует этот массив:

["217","255","0","0","-0.8","-255","0","0","0","70.71"]

Я вырезал пример линейного градиента MDN, так что он полностью тестирует регулярное выражение и не нуждается в прокрутке здесь. Я думаю, что я включил все возможности с точки зрения отрицательных чисел, десятичных знаков, единичных суффиксов, таких как deg и%, непоследовательного использования запятой и пробела, а также дополнительных символов точки/точки и дефиса/тире в тексте "lin-grad.ient ". Пожалуйста, дайте мне знать, если я что-то упустил. Единственное, что я вижу, что он не обрабатывает, это неправильно сформированное десятичное число, например, "0,8".

Если вам действительно нужен массив чисел, вы можете преобразовать весь массив в одну строку кода:

array = whatever.match(/-?\d*\.?\d+/g).map(Number);

Мой конкретный код, который выполняет синтаксический анализ функций CSS, не должен беспокоиться о нечисловом использовании символа точки/точки, поэтому регулярное выражение может быть еще проще:

/-?[\d\.]+/g

Ответ 9

ПОПРОБУЙТЕ ЭТО ОДИН:

var result = input.match(/\d+/g).join([])

Ответ 10

Если вы хотите, чтобы числа, разделенные точками/запятыми, также:

\d*\.?\d*

или

[0-9]*\.?[0-9]*

Вы можете использовать https://regex101.com/ для проверки своих регулярных выражений.

Ответ 11

Все, что есть у других решений, но с небольшой проверкой

// value = '675-805-714'
const validateNumberInput = (value) => { 
    let numberPattern = /\d+/g 
    let numbers = value.match(numberPattern)

    if (numbers === null) {
        return 0
    }  

    return parseInt(numbers.join([]))
}
// 675805714