Jawaban:
Ekspresi reguler:
var numberPattern = /\d+/g;
'something102asdfkj1948948'.match( numberPattern )
Ini akan mengembalikan Array dengan dua elemen di dalamnya, '102' dan '1948948'. Operasikan sesuai keinginan. Jika tidak cocok, itu akan mengembalikan nol.
Untuk menyatukan mereka:
'something102asdfkj1948948'.match( numberPattern ).join('')
Dengan anggapan Anda tidak berurusan dengan desimal kompleks, ini seharusnya sudah cukup.
d
, jadi.match(/\d+/g)
parseInt('987d98sf79s7f9s8f9sf'.match(/\d+/gi).join(''))
Anda juga dapat menghapus semua karakter non-digit ( \D
atau [^0-9]
):
let word_With_Numbers = 'abc123c def4567hij89'
let word_Without_Numbers = word_With_Numbers.replace(/\D/g, '');
console.log(word_Without_Numbers)
Untuk angka dengan pecahan desimal dan tanda minus, saya menggunakan cuplikan ini:
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"]
Pembaruan: - 7/9/2018
Menemukan alat yang memungkinkan Anda untuk mengedit ekspresi reguler secara visual: JavaScript Regular Expression Parser & Visualizer .
Memperbarui:
Berikut ini satu lagi yang dengannya Anda bahkan dapat debugger regexp: Penguji dan debugger regex online .
Memperbarui:
Satu lagi: RegExr .
Memperbarui:
Jika Anda hanya ingin digit:
var value = '675-805-714';
var numberPattern = /\d+/g;
value = value.match( numberPattern ).join([]);
alert(value);
//Show: 675805714
Sekarang Anda mendapatkan digit bergabung
Saya kira Anda ingin mendapatkan nomor dari string. Dalam hal ini, Anda dapat menggunakan yang berikut ini:
// 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
mengembalikan array string, bukan angka. Sebagai contoh Anda, ini akan kembali: * ["102"]
* ["102", "12"]
* null
Jawaban yang diberikan tidak benar-benar sesuai pertanyaan Anda, yang tersirat Trailing nomor. Juga, ingat bahwa Anda mendapatkan string kembali; jika Anda benar - benar membutuhkan nomor, berikan hasilnya:
item=item.replace('^.*\D(\d*)$', '$1');
if (!/^\d+$/.test(item)) throw 'parse error: number not found';
item=Number(item);
Jika Anda berurusan dengan id item numerik pada halaman web, kode Anda juga bisa berguna menerima Element
, mengekstraksi nomor dari id
(atau orang tua pertamanya dengan id
); jika Anda memiliki alat yang Event
berguna, kemungkinan Anda juga bisa mendapatkannya Element
.
IMO jawaban # 3 saat ini oleh Chen Dachao adalah cara yang tepat untuk pergi jika Anda ingin mendapatkan nomor apa pun, tetapi ungkapan reguler dapat disingkat dari:
/[-]{0,1}[\d]*[\.]{0,1}[\d]+/g
untuk:
/-?\d*\.?\d+/g
Misalnya, kode ini:
"lin-grad.ient(217deg,rgba(255, 0, 0, -0.8), rgba(-255,0,0,0) 70.71%)".match(/-?\d*\.?\d+/g)
menghasilkan array ini:
["217","255","0","0","-0.8","-255","0","0","0","70.71"]
Saya telah memotong contoh gradien linier MDN sehingga sepenuhnya menguji regexp dan tidak perlu menggulir di sini. Saya pikir saya telah memasukkan semua kemungkinan dalam hal angka negatif, desimal, akhiran satuan seperti deg dan%, koma dan penggunaan ruang yang tidak konsisten, dan karakter titik / titik dan tanda hubung / tanda hubung ekstra dalam teks "lin-grad.ient ". Tolong beri tahu saya jika saya melewatkan sesuatu. Satu-satunya hal yang dapat saya lihat yang tidak ditangani adalah angka desimal yang terbentuk dengan buruk seperti "0..8".
Jika Anda benar-benar menginginkan array angka, Anda dapat mengonversi seluruh array dalam baris kode yang sama:
array = whatever.match(/-?\d*\.?\d+/g).map(Number);
Kode khusus saya, yang mem-parsing fungsi-fungsi CSS, tidak perlu khawatir tentang penggunaan karakter dot / periode non-numerik, sehingga ekspresi reguler bisa lebih sederhana:
/-?[\d\.]+/g
Menggunakan split dan regex:
var str = "fooBar0123".split(/(\d+)/);
console.log(str[0]); // fooBar
console.log(str[1]); // 0123
Sesuai jawaban @ Syntle, jika Anda hanya memiliki karakter non numerik Anda akan mendapatkan Uncaught TypeError: Cannot read property 'join' of null
.
Ini akan mencegah kesalahan jika tidak ada kecocokan yang ditemukan dan mengembalikan string kosong:
('something'.match( /\d+/g )||[]).join('')
Jika Anda ingin nomor yang dipisahkan titik / koma juga, maka:
\d*\.?\d*
atau
[0-9]*\.?[0-9]*
Anda dapat menggunakan https://regex101.com/ untuk menguji regex Anda.
Segala sesuatu yang dimiliki solusi lain, tetapi dengan sedikit validasi
// 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