Если бы у меня была строка типа "что-то12" или "что-то 102", как бы я использовал регулярное выражение в javascript, чтобы вернуть только части числа?
Regex с использованием javascript для возврата только числа
Ответ 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.
Обновить:
Ответ 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