Відповіді:
Регулярні вирази:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
Це поверне масив з двома елементами всередині, "102" та "1948948". Дійте, як хочете. Якщо він не відповідає жодному, він повернеться до нуля.
Щоб об'єднати їх:
'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"]
Оновлення: - 9.07.2018
Знайдено інструмент, який дозволяє візуально редагувати регулярні вирази: JavaScript Regular Expression Parser & Visualizer .
Оновлення:
Ось ще один, за допомогою якого ви навіть можете налагодити regexp: Інтернет тестер regex та налагоджувач .
Оновлення:
Ще один: 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від цього.
На даний момент відповідь ІМО від 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
Використання розділення та регулярного вираження:
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/ для тестування своїх регулярних гекса.