Ekstrak ("dapatkan") angka dari sebuah string


355

Saya memiliki string dalam javascript seperti `# box2 'dan saya hanya ingin' 2 'darinya.

Mencoba:

var thestring = $(this).attr('href');
var thenum = thestring.replace( /(^.+)(\w\d+\w)(.+$)/i,'$2');
alert(thenum);

Itu masih mengembalikan # box2 dalam peringatan, bagaimana saya bisa membuatnya bekerja?

Perlu mengakomodasi untuk setiap nomor panjang yang terpasang di ujung.


1
Anda bisa melakukan seperti ini. ini akan bekerja dengan baik. var thestring = $ (this) .attr ('href'); var thenum = parsefloat (thestring); waspada (thenum);
Vivek Shukla

1
kode ini berfungsi dengan baik untuk saya tetapi untuk satu kasus, saya memiliki string '2,5 / mil' dan saya ingin mengekstrak 2,5 dari ini. Kode di atas memberi saya 25 bukannya 2.5
Bijay Singh

Jawaban:


578

Untuk contoh khusus ini,

 var thenum = thestring.replace( /^\D+/g, ''); // replace all leading non-digits with nothing

dalam kasus umum:

 thenum = "foo3bar5".match(/\d+/)[0] // "3"

Karena jawaban ini mendapatkan popularitas karena beberapa alasan, inilah bonusnya: generator regex.

function getre(str, num) {
  if(str === num) return 'nice try';
  var res = [/^\D+/g,/\D+$/g,/^\D+|\D+$/g,/\D+/g,/\D.*/g, /.*\D/g,/^\D+|\D.*$/g,/.*\D(?=\d)|\D+$/g];
  for(var i = 0; i < res.length; i++)
    if(str.replace(res[i], '') === num) 
      return 'num = str.replace(/' + res[i].source + '/g, "")';
  return 'no idea';
};
function update() {
  $ = function(x) { return document.getElementById(x) };
  var re = getre($('str').value, $('num').value);
  $('re').innerHTML = 'Numex speaks: <code>' + re + '</code>';
}
<p>Hi, I'm Numex, the Number Extractor Oracle.
<p>What is your string? <input id="str" value="42abc"></p>
<p>What number do you want to extract? <input id="num" value="42"></p>
<p><button onclick="update()">Insert Coin</button></p>
<p id="re"></p>


15
-1, "#box2_col3".replace( /^\D+/g, '')seharusnya ditunjukkan 2, bukan 2_col3.
Shiplu Mokaddim

2
@ shiplu.mokadd.im: Saya tidak melihat referensi apa pun #box2_col3dalam pertanyaan itu.
georg

1
Ya tidak ada referensi #box2_col3. Tapi lihat OP regex bekas ( \w)(.+$)) yang dengan jelas menunjukkan ada karakter lain setelah nomor tersebut.
Shiplu Mokaddim

3
dalam hal ini pola Anda juga gagal jika ada angka sebelum akhir.
Shiplu Mokaddim

2
Anda dapat replacebekerja dengan nomor terkemuka dengan menggunakan theString.replace(/^.*\D+/g, '');:, tetapi solusi shiplu.mokadd.im lebih baik.
LandonSchropp

225

Anda harus mencoba yang berikut ini:

var txt = "#div-name-1234-characteristic:561613213213";
var numb = txt.match(/\d/g);
numb = numb.join("");
alert (numb);​

hasil

1234561613213213

1
jawaban yang bagus tetapi bagaimana jika saya ingin set angka secara terpisah. yaitu 1234, 5616133 ...
Amar Singh

Atau one-liner + parsing ke integer:parseInt(txt.match(/\d/g).join(''), 10)
Lukas Liesis

" $ 20.0 ".match(/\d/g).join('') => "200" (hanya mengatakan)
vsync

91

Saya pikir ungkapan reguler ini akan membantu tujuan Anda:

var num = txt.replace(/[^0-9]/g,'');

Dimana txtsenar Anda.

Ini pada dasarnya merobek segala sesuatu yang bukan angka.

Saya pikir Anda dapat mencapai hal yang sama dengan menggunakan ini juga:

var num = txt.replace(/\D/g,'');

1
/[^0-9]/g+1 untuk keterbacaan. Juga digunakan dengan sebagian besar jawaban di sini: stackoverflow.com/q/1862130/1066234
Kai Noack

58

Coba yang berikut string.replace(/[^0-9]/g, '');ini : Ini akan menghapus semua karakter non-digit, hanya menyisakan digit dalam string

function retnum(str) { 
    var num = str.replace(/[^0-9]/g, ''); 
    return parseInt(num,10); 
}

console.log('abca12bc45qw'.replace(/[^0-9]/g, ''));
console.log('#box2'.replace(/[^0-9]/g, ''));


2
Ini lebih baik daripada jawaban yang diterima, karena ia mengganti semua non-angka secara global dan btw, /[^0-9]/gdapat diganti dengan /[^\d]/g.
CPHPython

52

Menggunakan fungsi pertandingan.

var thenum = thestring.match(/\d+$/)[0];
alert(thenum);

jsfiddle


1
Anda juga dapat menambahkan unary '+' untuk menjadikannya integer var thenum = + thestring.match (/ \ d + $ /) [0];
Sergey Onishchenko

Saya kira ini tidak berfungsi untuk> 1 digit angka? (Saya mengerti pertanyaannya adalah untuk 1 digit angka, tapi saya melihat kemungkinan angka> 10.)
Felix

@nissemand Jangan menebak . Coba sendiri. Bahkan kamu tidak melihat biola.
Shiplu Mokaddim

Suka ini. Cara paling sederhana untuk mengekstraksi angka menjadi variabel tanpa menyentuh atau memodifikasi elemen. Saya akan menghargai sebuah kombo dengan masing-masing untuk sebuah kebetulan multple di dalam sebuah string. yaitu string 12a55 melaporkan angka terakhir, tidak semua.
m3nda

1
@YevgeniyAfanasyev seharusnya tidak. Periksa pertanyaan aslinya. Khususnya baris terakhir. Nomor harus di akhir.
Shiplu Mokaddim

33

Mencoba semua kombinasi yang dikutip di atas dengan Kode ini dan membuatnya berfungsi, adalah satu-satunya yang bekerja pada string itu ->(12) 3456-7890

var str="(12) 3456-7890";
str.replace( /\D+/g, '');

Hasil: "1234567890"

Obs: saya tahu bahwa string seperti itu tidak akan berada pada attr tetapi apa pun, solusinya lebih baik, karena lebih lengkap.


Saya pikir lebih baik akan str.match(/\d+/g).map(Number)mengembalikan array
Artem Bernatskyi

33

Dan ini adalah cuplikan yang mengekstraksi harga dengan mata uang dan pemformatan:

var price = "£1,739.12";
parseFloat(price.replace( /[^\d\.]*/g, '')); // 1739.12

13

Anda dapat menggunakan metode parseInt yang bagus

itu akan mengonversi digit terkemuka ke angka

parseInt("-10px");
// will give you -10

18
ini hanya berfungsi ketika nomornya ada di awal string
Russj

2
kembalinya NaN
Ahmed Syed


4

Anda dapat menggunakan ekspresi reguler.

var txt="some text 2";
var numb = txt.match(/\d/g);
alert (numb);

Itu akan mengingatkan 2.


4
-1 beberapa digit tidak akan ditangkap dan untuk menggunakan array dalam lansiran
Shiplu Mokaddim

4

Dengan Ekspresi Reguler , cara mendapatkan angka dari String, misalnya:

String myString = "my 2 first gifts were made by my 4 brothers";
myString = myString .replaceAll("\\D+","");
System.out.println("myString : " + myString);

hasilnya myStringadalah " 24"

Anda dapat melihat contoh kode yang sedang berjalan ini di sini: http://ideone.com/iOCf5G


5
java! == javascript - replaceAll tidak ada di javascript standar. Hanya beberapa perpustakaan seperti jQuery yang memiliki metode itu. Di masa depan, Anda harus mengklarifikasi.
Levi Roberts

3

Anda dapat menggunakan Underscore String Library sebagai berikut

var common="#box"
var href="#box1"

_(href).strRight(common)

hasilnya adalah: 1

Lihat: https://github.com/epeli/underscore.string

DEMO:
http://jsfiddle.net/abdennour/Vyqtt/
Kode HTML:

<p>
    <a href="#box1" >img1</a>
    <a href="#box2" >img2</a>
    <a href="#box3" >img3</a>
    <a href="#box4" >img4</a>
</p>
<div style="font-size:30px"></div>

Kode JS:

var comm="#box"
$('a').click(function(){
  $('div').html(_($(this).attr('href')).strRight(comm))})

jika Anda memiliki akhiran sebagai berikut:

href="box1az" 

Anda dapat menggunakan demo berikutnya:

http://jsfiddle.net/abdennour/Vyqtt/1/

function retrieveNumber(all,prefix,suffix){
 var left=_(all).strRight(prefix);
 return _(left).strLeft(suffix);

}

3

Ini solt. yang memeriksa tanpa data

var someStr = 'abc'; // add 123 to string to see inverse

var thenum = someStr.match(/\d+/);

if (thenum != null )
{
    console.log(thenum[0]);
}
else
{
 console.log('no number');
}

2

Gunakan kode satu baris ini untuk mendapatkan angka pertama dalam sebuah string tanpa mendapatkan kesalahan:

var myInt = parseInt(myString.replace(/^[^0-9]+/, ''), 10);

2

silakan periksa di bawah javaScripts, di sana Anda hanya bisa mendapatkan nomor

var txt = "abc1234char5678#!9";
var str = txt.match(/\d+/g, "")+'';
var s = str.split(',').join('');
alert(Number(s));

keluaran: 1234567789


2

Anda bisa mengekstraksi angka dari string menggunakan ekspresi regex:

let string = "xxfdx25y93.34xxd73";
let res = string.replace(/\D/g, "");
console.log(res); 

output: 25933473


1
var elValue     = "-12,erer3  4,-990.234sdsd";

var isNegetive = false;
if(elValue.indexOf("-")==0) isNegetive=true;

elValue     = elValue.replace( /[^\d\.]*/g, '');
elValue     = isNaN(Number(elValue)) ? 0 : Number(elValue);

if(isNegetive) elValue = 0 - elValue;

alert(elValue); //-1234990.234

Iklankan penjelasan. Misalnya mengapa Anda menggunakan yaitu regex ini.
mentallurg

1

Jawaban ini akan mencakup sebagian besar skenario. Saya dapat mengatasi situasi ini ketika pengguna mencoba menyalin menempelkan nomor telepon

  $('#help_number').keyup(function(){
    $(this).val().match(/\d+/g).join("")
  });

Penjelasan:

str= "34%^gd 5-67 6-6ds"

str.match(/\d+/g)

Ini akan memberikan array string sebagai output >> ["34", "56766"]

str.match(/\d+/g).join("")

join akan mengonversi dan menggabungkan data array menjadi string tunggal

keluaran >> "3456766"

Dalam contoh saya, saya perlu output sebagai 209-356-6788 jadi saya gunakan ganti

  $('#help_number').keyup(function(){
    $(this).val($(this).val().match(/\d+/g).join("").replace(/(\d{3})\-?(\d{3})\-?(\d{4})/,'$1-$2-$3'))
  });

0
changeStrangeDate(dateString: string) {
var sum = 0;
var numbers = dateString.match(/\d+/g);
if (numbers.length > 1) {
  numbers.forEach(element => {
    sum += parseInt(element);
  }
  );
}
console.log(new Date(sum).toDateString());
return new Date(sum).toUTCString();

}

Anda dapat melakukannya seperti itu dan kemudian memanggil fungsi di mana Anda perlu, dengan parameter.

this.changeStrangeDate('/Date(1551401820000-0100)/');

0

Anda dapat melakukan fungsi seperti ini

function justNumbers(string) 
    {
        var numsStr = string.replace(/[^0-9]/g,'');
        return parseInt(numsStr);
    }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.