Ответы:
Регулярные выражения:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
Это вернет массив с двумя элементами внутри: «102» и «1948948». Действуйте как хотите. Если он не соответствует ни одному, он вернет null.
Чтобы объединить их:
'something102asdfkj1948948'.match( numberPattern ).join('')
Предполагая, что вы не имеете дело со сложными десятичными знаками, я полагаю, этого должно быть достаточно.
d
, поэтому.match(/\d+/g)
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
Вы также можете удалить все нецифровые символы ( \D
или [^0-9]
):
let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');
console.log(word_Without_Numbers)
Для числа с десятичной дробью и знаком минус я использую этот фрагмент:
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"]
Обновление: - 09.07.2018
Нашел инструмент, позволяющий визуально редактировать регулярные выражения: Анализатор и Визуализатор регулярных выражений JavaScript .
Обновить:
Вот еще один, с помощью которого вы можете даже отладить регулярное выражение: онлайн-тестер и отладчик регулярных выражений .
Обновить:
Еще один: RegExr .
Обновить:
Если вам нужны только цифры:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
Теперь вы соединяете цифры
Я думаю, вы хотите получить число (а) из строки. В этом случае вы можете использовать следующее:
// 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
get_numbers/1
возвращает массив строки, а не числа. В вашем примере он вернет: * ["102"]
* ["102", "12"]
* null
Приведенные ответы на самом деле не соответствуют вашему вопросу, что подразумевает конечный номер. Также помните, что вы получаете обратно строку; если вам действительно нужно число, приведите результат:
item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);
Если вы имеете дело с числовыми идентификаторами элементов на веб-странице, ваш код также может с пользой принять Element
, извлекая число из его id
(или его первого родителя с символом id
); если у вас есть под Event
рукой, вы, вероятно Element
, тоже можете получить от него.
ИМО, ответ №3 на данный момент Чен Дачао - правильный путь, если вы хотите захватить любое число, но регулярное выражение можно сократить от:
/[-]{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-gradient.ient" ». Пожалуйста, дайте мне знать, если я что-то упускаю. Единственное, что я вижу, что он не обрабатывает, - это неправильно сформированное десятичное число, такое как "0..8".
Если вам действительно нужен массив чисел, вы можете преобразовать весь массив в той же строке кода:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
Мой конкретный код, который анализирует функции CSS, не должен беспокоиться о нечисловом использовании символа точки / точки, поэтому регулярное выражение может быть еще проще:
/-?[\d\.]+/g
Использование разделения и регулярного выражения:
var str = "fooBar0123".split(/(\d+)/);
console.log(str[0]); // fooBar
console.log(str[1]); // 0123
Согласно ответу @Syntle, если у вас есть только нечисловые символы, вы получите файл Uncaught TypeError: Cannot read property 'join' of null
.
Это предотвратит ошибки, если совпадения не найдены, и вернет пустую строку:
('something'.match( /\d+/g )||[]).join('')
Если вам нужны числа, разделенные точкой / запятой, тогда:
\d*\.?\d*
или
[0-9]*\.?[0-9]*
Вы можете использовать https://regex101.com/ для проверки своих регулярных выражений.